我有一个 ES6 module,它默认导出一个 React Component 类,但也导出一个普通的 JS 函数作为命名导出。在测试使用此module的其他包时,我想模拟默认导出的组件和命名的导出函数,以保持我的单元测试纯净。
该module看起来像这样:
import React, { Component } from 'react';
export default class MyComponent extends Component {
render() {
return <div>Hello</div>
}
}
export function myUtilityFunction() { return 'foo' };
我想使用以下语法来模拟导出:
import React from 'react';
import MyComponent, { myUtilityFunction } from './module';
jest.mock('./module');
MyComponent.mockImplementation(() => 'MockComponent');
myUtilityFunction.mockImplementation(() => 'foo');
但是,当我尝试使用此语法时,MyComponent 在其他组件中使用时似乎不会被模拟。当我尝试像这样模拟 MyComponent 并自行呈现它时,它呈现为 null。
这种行为很奇怪,因为如果我使用完全相同的语法,但两个导入都是 JavaScript 函数,模拟会按预期工作。请参阅我在此处打开的 StackOverflow 问题,该问题确认当导入是两个函数时语法有效。
这是演示该问题的 GitHub 存储库,以及我尝试过的几种解决方案:https : //github.com/zpalexander/jest-enzyme-problem
您可以构建 repo 并使用 yarn install && yarn test 运行测试
谢谢!