使用Jest测试带有RequireJS依赖的es6模块时出现“Define未定义”的错误。

21

我有一个 Jest 测试套件,由于试图测试的组件依赖于 RequireJS 模块,因此无法运行。以下是我看到的错误:

 FAIL  __tests__/components/MyComponent.test.js
  ● Test suite failed to run

    ReferenceError: define is not defined

      at Object.<anonymous> (node_modules/private-npm-module/utils.js:1:90)
组件具有以下导入:

import utils from 'private-npm-module';

这个private-npm-module设置如下:

define('utils', [], function() {
  return {};
});
当使用 Babel 将 MyComponent 转译并在浏览器中运行时,该依赖项能正常工作。这个问题只影响单元测试。如何让我的测试套件在具有 RequireJS 依赖项的组件上运行?
我在 package.json 的 jest 配置中使用 babel-jest 作为我的 scriptPreprocessor,使用的是 jest v0.15.1 版本。

Jest中有一个(被拒绝的)功能请求,要求支持AMD JavaScript模块,https://github.com/facebook/jest/issues/17 - user7610
1个回答

17

所以,Jest不支持RequireJS。在我的特定情况下,最简单和最合适的方法是在MyComponent.test.js文件的顶部模拟我的依赖关系:

所以,RequireJS不受Jest支持。在我特定的情况下,最容易和最合适的做法是在MyComponent.test.js的顶部模拟我的依赖。

jest.mock('private-npm-module', () => {
  // mock implementation
})

import MyComponent from '../../components/MyComponent';

这样,当加载MyComponent时,它的依赖关系已经被模拟了,因此不会尝试加载RequireJS模块。

如果您真的需要为测试加载RequireJS模块,可能可以使用Jest的transform配置将您的实现包装在一个RequireJS到ES6转换器中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接