Javascript 如何将外部信息从网页传递到笑话?
作为grunt构建过程的一部分,我已经拥有了这个网页配置:Javascript 如何将外部信息从网页传递到笑话?,javascript,unit-testing,reactjs,webpack,jestjs,Javascript,Unit Testing,Reactjs,Webpack,Jestjs,作为grunt构建过程的一部分,我已经拥有了这个网页配置: module.exports = { options: { output: { path: path.resolve('../ui/static/js'), filename: '[name].js', chunkFilename: '[id].[name].js', libraryTarget: 'amd', library: '[name]'
module.exports = {
options: {
output: {
path: path.resolve('../ui/static/js'),
filename: '[name].js',
chunkFilename: '[id].[name].js',
libraryTarget: 'amd',
library: '[name]'
},
externals: [
'jquery',
'lodash',
'backbone',
'backbone.layoutmanager',
'moment',
'spin',
'lib/select2.min',
'dispatcher'
],
resolve: {
root: path.resolve('../ui'),
alias: {
'jst': 'static/jst'
}
}
我们现在正在采取行动作出反应,我需要在我的测试文件中导入一些文件,其中包括这些依赖项,但jest找不到它们:
Cannot find module 'lib/select2.min' from 'helpers.js'
Cannot find module 'jst/templates_jst' from 'base-view.js
解决此问题的正确方法是什么?您需要模拟外部库 jquery的示例:
希望它能有所帮助。以下是今天使用的
webpack@4.11.1
和jest@23.1.0
。假设这是您的外部网页包配置:
externals: {
react: {
root: 'React',
commonjs2: 'react',
commonjs: 'react',
amd: 'react',
},
}
您需要映射每个外部库,以便在jest配置中正确解析,如下所示:
moduleNameMapper: {
"^./react": path.resolve(__dirname, 'node_modules/react'),
}
调试问题时,请确保检查生成的组件文件的外观。您希望确保看到以下内容:
!function(e,t){if("object"==typeof exports&&"object"==typeof module)
module.exports=t(require("react"));
else if("function"==typeof define&&define.amd)define(["react"],t);
else{var n="object"==typeof exports?t(require("react")):t(e.React);
对于commonjs和amd来说,重要的一点是
react
,对于浏览器来说是react
。对于我来说,使用\uuuuumocks\uuuu
会有点冗长,但我使用了
jest.mock('myModule', () => {/* module impl */}, {virtual: true})
如果
\uuuu mocks\uuuuu
建议对您也进行详细说明,请查看文档您是否尝试使用安装文件导入这些软件包并附加到全局
?是的。它在我的模板上失败,包括在网页包中,如下所示:resolve:{root:path.resolve('../ui'),别名:{jst':'static/jst'}}}
我开玩笑说:无法从'base view.js'中找到模块'jst/templates_jst'。
我可以通过spin、jquery、,通过将它们添加到\uuumocks\uuuu
文件夹中,我不知道如何处理jst/templates\ujst
还有一种可能是使用virtualmockjest.mock('jst/templates\ujst',()=>{},{virtual:true})
这将如何解决问题?如果我在测试中模拟react,它们将不再通过,因为我需要实际的react来呈现用于测试的组件。对于react,它当然没有帮助,在react作为外部库的情况下,您必须在依赖项中使用它。但是对于一些不影响测试的外部软件包来说,它非常有用,但是仍然需要安装它才能解决导入和编译问题。这里的mocks非常适合。这太棒了,我在我执行的任何web搜索中都没有看到提到这一点,而且这对外部库非常有效,我也不想在创建时如此冗长,谢谢