致力于将项目从 Mocha 过渡到 Jest,以利用运行测试的速度以及 Jest 框架本身并遇到问题。 Rewire在代码库中使用得相当广泛,我在运行 gulp-jest 任务时遇到问题,并且仅对于那些使用 rewire 的文件。我认为这与模块加载或未加载有关,但我很困惑。这是真正简单的 gulp 任务,没有太多内容。我已经在代码库上运行了广泛的代码修改,并且许多测试都通过了,只是没有那些使用重新接线的测试。
gulp.task('jest', function() {
process.env.NODE_ENV = 'test';
return gulp.src('name/path').pipe(
jest({
preprocessorIgnorePatterns: ['<rootDir>/node_modules/'],
automock: false,
resetModules: true,
setupFiles: ['./jestsetup.js']
})
);
});
gulp.task('newtest', function(callback) {
runSequence('env', 'jest', callback);
});
每当运行与重新连线相关的文件时,它们都会提示找不到该文件。我在这里错过了什么吗?我确信模块本身已为 require
设置了正确的路径。
这是来自 jest/rewire 的实际错误:
FAIL path/to/folder/file/app.test.js
● Test suite failed to run
Cannot find module '../../../../path/to/folder/file/app'
at Function.Module._resolveFilename (module.js:469:15)
at internalRewire (node_modules/rewire/lib/rewire.js:23:25)
at rewire (node_modules/rewire/lib/index.js:11:12)
at Object.<anonymous (path/to/folder/file/app.test.js:10:14)
at process._tickCallback (internal/process/next_tick.js:109:7)
使用 Node 6.X、jest 20.x
提前致谢!
最佳答案
Jest 有自己的模拟导入机制,称为 jest.mock .
您需要改用它而不是重新接线。
示例
// banana.js
module.exports = () => 'banana';
// __tests__/test.js
jest.mock('../banana');
const banana = require('../banana'); // banana will be explicitly mocked.
banana(); // will return 'undefined' because the function is auto-mocked.
示例取自here
关于javascript - 集成 Jest 和 Rewire,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45892496/