在Jest中模拟模块时如何调用默认的导出函数?

时间:2019-05-13 09:12:09

标签: unit-testing jestjs

我正在尝试在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,但这似乎并没有调用/创建我的模拟。

关于如何验证是否在外部依赖项中以调用方式导出默认函数的方法有何想法?

1 个答案:

答案 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来提升。