我使用 ts-jest
和 jest
用打字稿编写我的测试文件。
我很困惑如何输入模块的模拟函数。
这是我的代码:
./module.ts
:
import {IObj} from '../interfaces';
const obj: IObj = {
getMessage() {
return `Her name is ${this.genName()}, age is ${this.getAge()}`;
},
genName() {
return 'novaline';
},
getAge() {
return 26;
}
};
export default obj;
./module.test.ts
:
import * as m from './module';
describe('mock function test suites', () => {
it('t-1', () => {
// I think the jest.Mock<string> type here is not correct.
m.genName: jest.Mock<string> = jest.fn(() => 'emilie');
expect(jest.isMockFunction(m.genName)).toBeTruthy();
expect(m.genName()).toBe('emilie');
expect(m.getMessage()).toEqual('Her name is emilie, age is 26');
expect(m.genName).toHaveBeenCalled();
});
});
如何键入模块 genName
的模拟函数 m
?
typescript
给我一个错误:
错误:(8、7) TS2540:无法分配给“genName”,因为它是常量或只读属性。
原文由 slideshowp2 发布,翻译遵循 CC BY-SA 4.0 许可协议
这就是我如何解决同样的问题,以及我现在如何进行所有的嘲笑和间谍活动。
使用此设置,您可以以编程方式更改不同测试的 mock 的实现,然后断言调用了该函数以及调用它的内容,同时在测试之间和所有测试之后清除您的 mock。