Reactjs 试图监视一个模拟函数
我试图在模拟类中存在的函数上执行间谍:Reactjs 试图监视一个模拟函数,reactjs,typescript,jestjs,Reactjs,Typescript,Jestjs,我试图在模拟类中存在的函数上执行间谍: 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(Se
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()
(无需实现)。从那时起,你就可以写断言了。您应该没有理由想要监视一个模拟函数,因为它已经是一个模拟函数了
您应该监视实际实现,或者为模拟模块上的方法编写断言
e、 g
使用
jest.mock
时,它会自动为模块的每个属性创建一个mock,并将其函数替换为jest.fn()
(无需实现)。从那时起,你就可以写断言了。您应该没有理由想要监视一个模拟函数,因为它已经是一个模拟函数了
您应该监视实际实现,或者为模拟模块上的方法编写断言
e、 g
“为模拟模块上的方法编写断言”-这是我的第一个想法。但我无法确定如何访问我在uuumocks\uuuu/Service创建的模拟函数。当我尝试像“Service.mock”这样的东西时,我收到一个抱怨,说类型服务中不存在“mock”。从我的代码中知道为什么它可能没有将其视为模拟类吗?@LeeLoftiss我还没有尝试与TS开玩笑,但可能需要告诉TS编译器它正在使用mock,mock具有
.mock
property@LeeLoftiss您可以尝试const mockedService=Service as jest.Mock代码>谢谢你的帮助@Teneff。事实上,我尝试过这种方法,似乎应该奏效。我的猜测是,由于没有其他人响应,我只是做了一些错误的事情,阻止了这种方法的工作。“为模拟模块上的方法编写断言”——这是我的第一个想法。但我无法确定如何访问我在uuumocks\uuuu/Service创建的模拟函数。当我尝试像“Service.mock”这样的东西时,我收到一个抱怨,说类型服务中不存在“mock”。从我的代码中知道为什么它可能没有将其视为模拟类吗?@LeeLoftiss我还没有尝试与TS开玩笑,但可能需要告诉TS编译器它正在使用mock,mock具有.mock
property@LeeLoftiss您可以尝试const mockedService=Service as jest.Mock代码>谢谢你的帮助@Teneff。事实上,我尝试过这种方法,似乎应该奏效。我的猜测是,由于没有其他人回应,我只是做了一些错误的事情,阻止了这种方法的工作。
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);
});