Попытка шпионить за поддельной функцией - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь выполнить 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, поскольку оно не является функцией

Я пытался изменить функцию смоделированной стрелки на функцию (), но это не помогло.

Как я могу настроить это, чтобы я мог следить за своей смоделированной функцией?

1 Ответ

0 голосов
/ 12 октября 2019

При использовании 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);
});

рабочий пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...