试图监视模拟函数



我正在尝试对模拟类中存在的函数执行 spyOn:

test.ts -
import Service from '../base_classes/Service';
jest.mock('../base_classes/Service');
const o: Component = new Component();
it('should load model specific information', async () => {
const getSpy = jest.spyOn(Service.prototype, 'get');
let t = await o.load(1);
expect(t.name).toEqual('test_name');
expect(getSpy).toHaveBeenCalledTimes(1);
});
__mocks__/Service.ts -
export const mockGet = jest.fn(async () => Promise.resolve({name: 
'test_name'}));
const mock = jest.fn().mockImplementation(() => {
return {
get: mockGet
}
});
export default mock;

由此产生的错误是:无法监视 get 属性,因为它不是函数

我尝试将模拟箭头函数更改为函数((,但这没有帮助。

如何设置它,以便我可以监视我的模拟功能?

使用jest.mock时,它会自动为模块的每个属性创建一个模拟,将其函数替换为jest.fn()(无实现(。从那时起,您可以编写断言。您应该没有理由想要监视模拟函数,因为它已经是一个模拟函数。

您应该监视实际的实现,或者为模拟模块上的方法编写断言。

例如

it('should load model specific information', async () => {
let t = await o.load(1);
expect(t.name).toEqual('test_name');
expect(Service.mock.instances[0].get).toHaveBeenCalledTimes(1);
});

工作示例

最新更新