我正在尝试在Jest测试中模拟外部依赖项。 我的目标是验证是否使用某些指定的参数调用了依赖项。
依赖项导出默认函数,这使({不可能))难以使用jest.SpyOn
。
我尝试如下使用jest.mock
:
const callback = jest.fn(() => 'output');
jest.mock('dependecy', () => callback);
it('call dep with some args' () => {
...
expect(callback).toBeCalledWith('arg1' , 'arg2')
});
也尝试了jest.mock('dependecy', () => ({ default: callback }));
。
但是,无论哪一个都不成功,我想这是因为jest.mock
的提升。因此,我尝试了jest.doMock
,但这似乎并没有调用/创建我的模拟。
关于如何验证是否在外部依赖项中以调用方式导出默认函数的方法有何想法?
答案 0 :(得分:1)
这是一个简单的工作示例,应该可以帮助您:
code.js
import dependency from 'dependency';
export const func = () => 'returned ' + dependency();
code.test.js
import { func } from './code';
import dependency from 'dependency'; // <= dependency will be...
jest.mock('dependency', () =>
jest.fn(() => 'mocked') // <= ...this mock function
);
describe('func', () => {
it('should call dependency', () => {
const result = func();
expect(result).toBe('returned mocked'); // Success!
expect(dependency).toHaveBeenCalled(); // Success!
});
});
请注意,模块工厂功能必须是自包含的,以便可以用babel-jest
来提升。