致力于将项目从Mocha转换为Jest,以利用运行测试的速度以及Jest框架本身并遇到问题。 Rewire在代码库中被广泛使用,我在运行gulp-jest任务时遇到问题,而仅用于那些使用重新连接的文件。我认为它与模块加载或不加载有关,但我很难过。这是一个非常简单的gulp任务,对它没有多大帮助。我已经在代码库上运行了大量的codemod,并且许多测试都通过了,而不是那些使用重新连接的测试。
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)
使用节点6.X,jest 20.x
提前致谢!
答案 0 :(得分:1)
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
答案 1 :(得分:-1)
令我惊讶的是,Proxyquire与玩笑不兼容。要模拟依赖项,您需要利用模拟库,例如rewiremock。
请查看this answer和本REPL example,了解如何成功模拟依赖包。