javascript - 集成 Jest 和 Rewire

标签 javascript node.js gulp jestjs

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

相关文章:

node.js - 无法使用 fetch 发送请求

javascript - 如何使用 gulp.js 从内存中的字符串生成 SCSS 文件?

javascript - 如何在悬停或单击时打开 JS 菜单

javascript - 如何在 Node.js 应用程序中最好地保护 MongoDB 数据库 URL

javascript - 需要两次点击的 Accordion

javascript - 无法使用 Node.js + XMPP 接收上游 GCM 消息

javascript - 如何使用 GULP/NODE 在 JavaScript 中获取 Jenkins BUILD_NUMBER?

node.js - Gulp + Browserify + TypeScript 到浏览器

javascript - 用于返回下拉值的 Laravel 表单验证

javascript - GWT + Google 可视化 API = Firefox 插件