我有一个我试图测试的模块 . 该模块正在使用其他外部模块,并且开玩笑很难解决它们 .
它正在解决以下基本路径:./ node_modules/react-tag-input/dist-modules/
而不是:./ node_modules/react-tag-input/node_modules/react-dnd
下面是正在发生的事情的简化版本:
Error:
Cannot find module 'react-dnd' from 'reactTags.js'
at Resolver.resolveModule (node_modules/jest-cli/node_modules/jest-resolve/build/index.js:160:17)
at Object.<anonymous> (node_modules/react-tag-input/dist-modules/reactTags.js:13:17)
at Object.<anonymous> (src/tagger/eventtagger.js:5:404)
这是我的测试文件: caseevent.test.js
import EventTagger from './eventtagger.js';
eventtagger.js
import ReactTags from 'react-tag-input';
package.json
"jest": {
"moduleFileExtensions": [
"js",
"jsx"
],
"modulePaths": [
"<rootDir>"
],
},
"dependencies": {
"babel-jest": "^17.0.2",
"flux": "^2.0.1",
"install": "^0.8.1",
"jest": "^17.0.3",
"lodash.flow": "^3.3.0",
"npm": "^3.10.6",
"object-assign": "^1.0.0",
"react": "^15.4.0",
"react-dnd": "git+https://github.com/jcrogel/react-dnd.git",
"react-dnd-html5-backend": "^2.0.0",
"react-dom": "^15.4.0",
"react-tag-input": "^4.4.0",
"react-tagcloud": "^0.6.1"
},
"devDependencies": {
"babel-cli": "^6.9.0",
"babel-core": "^6.14.0",
"babel-eslint": "^4.1.3",
"babel-loader": "^6.2.5",
"babel-preset-es2015": "^6.0.15",
"babel-preset-react": "^6.0.15",
"babel-preset-stage-0": "^6.0.15",
"babel-register": "^6.9.0",
"chai": "^3.5.0",
"enzyme": "^2.6.0",
"jest-cli": "^17.0.3",
"jsdom": "^9.4.0",
"lodash": "4.14.1",
"react-addons-test-utils": "^15.4.0",
"react-native": "^0.38.0",
"react-test-renderer": "15.4.0",
"sinon": "^1.17.4",
"webpack": "^1.13.1",
"webpack-dev-server": "^1.14.1",
"whatwg-fetch": "^2.0.1"
}
我错过了什么?如何通过jest-resolve找到或模拟更深层的组件?
2 回答
我也有同样的问题 . 我试过的一些事情:
测试文件顶部的jest.unmock(模块)polyfill Jest安装文件中的模块jest.mock(jest.fn()=> {console.log('做某事'))最后,这似乎工作,但我找不到关于此的文档:
在测试文件的顶部:
/ ** * @providesModule moduleName * /
这似乎认出了我需要的模块 . Jest应该隐含地看到开箱即用的模块,但我没有那种经验 .
我在我的jest测试中遇到了类似的问题,webpack的外部依赖 .
解决这个问题:
如果__test__文件夹,我在同一级别创建一个__mocks__文件夹 .
在其中,我创建了一个具有相同名称的依赖项的文件,在我的例子中它是jquery($ .js) .
在我的测试文件中,我使用jest.mock函数来引用模拟外部依赖:jest.mock('$');
来自开玩笑的文档:https://facebook.github.io/jest/docs/manual-mocks.html
希望它可以帮助 .