集成Jest和Rewire

时间:2017-08-26 06:14:33

标签: javascript node.js gulp jestjs

致力于将项目从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

提前致谢!

2 个答案:

答案 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,了解如何成功模拟依赖包。