Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 试图监视一个模拟函数_Reactjs_Typescript_Jestjs - Fatal编程技术网

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);
});