我可以在笑话单元中模拟导入的功能吗

时间:2020-07-30 05:32:44

标签: javascript unit-testing mocking jestjs

我有这样的代码

import fun from '../../../example';
export async function init (props:any){
   if (fun()){
      doSomething();
   }
}

我正在为上面的代码创建单元测试,但实际上我只是想模拟文件中fun的实现,因为我无法更改其原始文件中的fun

1 个答案:

答案 0 :(得分:0)

您可以使用jest.mock(moduleName, factory, options)模拟?typename(rst)模块。

例如

../../../example

index.ts

import fun from './example'; export async function init(props: any) { if (fun()) { console.log('doSomething'); } }

example.ts

export default function fun() { console.log('real implementation'); return false; }

index.test.ts

单元测试结果:

import { init } from './';
import fun from './example';
import { mocked } from 'ts-jest/utils';

jest.mock('./example', () => jest.fn());

describe('63166775', () => {
  it('should pass', async () => {
    expect(jest.isMockFunction(fun)).toBeTruthy();
    const logSpy = jest.spyOn(console, 'log');
    mocked(fun).mockReturnValueOnce(true);
    await init({});
    expect(logSpy).toBeCalledWith('doSomething');
    expect(fun).toBeCalledTimes(1);
    logSpy.mockRestore();
  });
});