reactjs - 如何使用 Jest 监视默认导出函数?

标签 reactjs unit-testing mocking jestjs spy

假设我有一个导出默认函数的简单文件:

// UniqueIdGenerator.js
const uniqueIdGenerator = () => Math.random().toString(36).substring(2, 8);

export default uniqueIdGenerator;

我会这样使用:

import uniqueIdGenerator from './UniqueIdGenerator';
// ...
uniqueIdGenerator();

我想在测试中断言调用此方法时会保留原始功能。我会使用 jest.spyOn 来做到这一点,但是它需要一个对象以及一个函数名称作为参数。如何以干净的方式做到这一点?还有类似的GitHub issue对于任何感兴趣的人来说, Jasmine

最佳答案

我最终放弃了默认导出:

// UniqueIdGenerator.js
export const uniqueIdGenerator = () => Math.random().toString(36).substring(2, 8);

然后我可以像这样使用和监视它:

import * as UniqueIdGenerator from './UniqueIdGenerator';
// ...
const spy = jest.spyOn(UniqueIdGenerator, 'uniqueIdGenerator');

Some recommend将它们包装在 const 对象中,然后将其导出。我想你也可以使用一个类来包装。

但是,如果您无法修改该类,仍然有一个(不太好的)解决方案:

import * as UniqueIdGenerator from './UniqueIdGenerator';
// ...
const spy = jest.spyOn(UniqueIdGenerator, 'default');

关于reactjs - 如何使用 Jest 监视默认导出函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245654/

相关文章:

javascript - 当我将 webpack.ProvidePlugin() 与 ESlint 一起使用时,未定义“ReactDOM”

reactjs - Webpack 4 作为 JSX 文件

unit-testing - 带有可观察对象的单元测试模拟服务 => 订阅不是函数

java - 分层 Java Rest 应用程序的单元测试策略

python - 如何使用模拟来 stub 方法装饰器?

linux - 如何让全局安装的节点模块在终端上运行

css - 如何增加 Material UI 下拉菜单的宽度

java - 使用 Single.just(true) 作为预期结果对 RxJava 进行单元测试

java - 为什么执行模拟方法时没有调用mockito?

javascript - 如何模拟 axios api 调用以根据输入返回不同的值?