我有这样的代码
import fun from '../../../example';
export async function init (props:any){
if (fun()){
doSomething();
}
}
我正在为上面的代码创建单元测试,但实际上我只是想模拟文件中fun的实现,因为我无法更改其原始文件中的fun
答案 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();
});
});