测试具有 RequireJS 依赖项的 es6 module时,Jest 中的“未定义”

IT技术 reactjs webpack babeljs jestjs babel-jest
2021-05-17 17:17:33

我有一个 Jest 测试套件无法运行,因为它尝试测试的组件依赖于 RequireJS module。这是我看到的错误:

 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 {};
});

MyComponent用 babel 编译并在浏览器中运行时,依赖项运行正常。此问题仅影响单元测试。如何让我的测试套件在具有 RequireJS 依赖项的组件上运行?

我用babel-jest我的scriptPreprocessor中的package.json的玩笑配置。我正在使用 jest v0.15.1。

1个回答

因此,Jest 不支持 RequireJS。在我的特殊情况下,在顶部模拟我的依赖是最简单和最合适的MyComponent.test.js

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

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

这样,当MyComponent加载时,它的依赖已经被模拟,所以它不会尝试加载 RequireJS module。

如果您确实需要为测试加载 RequireJS module,则可以使用jest 的transform配置将您的实现包装在 RequireJS 到 ES6 转换器中。