假设我的util.js中有
export function foo(){ ... do something}
export function bar(){ ... do something}
...
在各种组件中,我都使用foo
//Foo1.component.js
import { foo } from './util'A
... do something using foo.
//Foo2.component.js
import { foo } from './util'A
... do something using foo.
等等。
例如在Foo1.test.js
中,我该如何模拟。
更好的是,有没有办法我可以从jest.config中“劫持”此foo
导入。
在moduleNameMapper
中也许?
是否已经对所有测试Foo1.test.js
和Foo2.test.js
进行了模拟?
答案 0 :(得分:1)
是的,有一种方法可以在测试环境中模拟模块。
如果要模拟特定测试文件中的模块,可以尝试使用jest.mock()
函数。例如,在foo
测试文件中模拟Foo1.component.js
方法将像这样:
// Foo1.component.test.js
jest.mock('./path/to/utils.js', () => ({
foo: () => { // custom implementation for test env }
bar: () => { // custom implementation for test env if needed }
}));
// The foo imported below has the custom implementation for test env
import { foo } from './util';
另一个选择是创建一个模拟模块,我认为这是您需要的更好的套件。在utils.js
所在的文件夹中,创建一个__mocks__
文件夹,在该文件夹下您将添加文件utils.js
(与要模拟的模块同名),在该文件中,您将可以构成util.js
模块的模拟行为。例如:
// __mocks__/utils.js
export function foo(){ ... mock implementation}
export function bar(){ ... mock implementation}
每当需要在测试文件中使用那些模拟实现时,只需调用带有模块路径的jest.mock
方法即可。例如:
// Foo1.component.test.js
jest.mock('./path/to/utils.js');
// The foo imported below has the custom implementation for test env
import { foo } from './util';
链接: