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

2024-06-27

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

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

export default uniqueIdGenerator;

我会这样使用:

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

我想在我的测试中断言调用此方法时会保留原始功能。我会这样做jest.spyOn然而,它需要一个对象和一个函数名作为参数。如何以干净的方式做到这一点?有一个类似的GitHub问题 https://github.com/jasmine/jasmine/issues/1414 for jasmine对于任何有兴趣的人。


我最终放弃了默认导出:

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

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

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

有些推荐 https://remarkablemark.org/blog/2018/04/10/jest-spyon-function/将它们包装在 const 对象中,然后将其导出。我想你也可以使用一个类来包装。

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

import * as UniqueIdGenerator from './UniqueIdGenerator';
// ...
const spy = jest.spyOn(UniqueIdGenerator, 'default');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Jest 监视默认导出函数? 的相关文章

随机推荐