Использование `new` в имитируемой функции с помощью Jest

Я пытаюсь имитировать возвращаемое значение при использовании new против имитируемой функции:

const myMock = jest.fn();
myMock.mockReturnValueOnce('some_string');
const result = new myMock();

Проблема в том, что new myMock() возвращает {} (пустой объект) вместо указанного мной возвращаемого значения.

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


person samanime    schedule 19.07.2017    source источник


Ответы (1)


Не похоже, что есть какой-либо способ имитировать результат new myMock() напрямую с помощью Jest API.

Вместо этого я обернул ее функцией и передал ей параметры. Я также должен был убедиться, что полученное значение было объектом (это вещь JavaScript).

В итоге получилось так:

const mockedValue = { d: 'DUMMY' };
const mock = jest.fn().mockReturnValueOnce(mockedValue);
const myMock = (a, b) => mock(a, b); // a, b are parameters. Use more or less as needed
const result = new myMock(); // { d: 'DUMMY' }

Функция-оболочка - это обычная функция, но когда она вызывается с new, я могу вместо этого вернуть результат моего mock в качестве нового значения. Я передаю параметры, которые используются, чтобы убедиться, что проверки с .toBeCalledWith() работают должным образом.

person samanime    schedule 19.07.2017