我似乎无法使模拟正常工作。
一些上下文:
"jest": "^24.8.0",
"ts-jest": "^24.0.2",
"typescript": "^3.5.3"
storage.ts 包含方法getOsTmpDir
。
moduleA.ts 正在消耗 storage.ts
在 moduleA.spec.ts 中:
jest.mock('./storage', () => ({
getOsTmpDir: jest.fn().mockImplementation(() => '/tmp'),
}));
打印(在console.log(getOsTmpDir());
中给出未定义
我尝试过的其他事情:
getOsTmpDir: jest.fn(() => '/tmp')
getOsTmpDir: jest.fn().mockReturnValue('/tmp')
但似乎无济于事。我想念什么?
编辑:我已经找到问题了。我没有注意到所有模拟在每次测试之前都已重置,因为我已经在文件顶部定义了模拟(一次) ,则在进行任何测试之前,模拟就被终止了
beforeEach(async () => {
jest.resetAllMocks(); <----
....
}
答案 0 :(得分:1)
您如何导出/导入该方法?这是模拟导出函数时的外观:
定义“真实”功能:
~fileA.ts
...
export function what() {
console.log('A');
}
...
测试:
~test.ts
...
import { what } from './fileA';
jest.mock('./fileA', () => ({
what: jest.fn().mockImplementation(() => console.log('B')),
}));
describe('mocks', () => {
it('should work', () => {
what();
});
});
$ jest test.ts
...
console.log test.ts:9
B
您应该看到测试调用了what
的模拟实现并记录了一个B。