我有一个无法运行的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设置,如下所示:
private-npm-module
define('utils', [], function() { return {}; });
当MyComponent使用babel进行编译并在浏览器中运行时,依赖项将正确运行。此问题仅影响单元测试。如何使我的测试套件在具有RequireJS依赖项的组件上运行?
MyComponent
我用babel-jest我的scriptPreprocessor中的package.json的玩笑配置。我正在使用jest v0.15.1。
babel-jest
scriptPreprocessor
因此,Jest不支持RequireJS。在我的特定情况下,在以下位置模拟我的依赖关系是最简单,最合适的方法MyComponent.test.js:
MyComponent.test.js
jest.mock('private-npm-module', () => { // mock implementation }) import MyComponent from '../../components/MyComponent';
这样,在MyComponent加载时,其依赖关系已经被模拟,因此它不会尝试加载RequireJS模块。
如果确实需要为测试加载RequireJS模块,则可以使用jest的transform配置将您的实现包装在RequireJS to ES6转换器中。
transform