Как шпионить за экспортированной функцией по умолчанию с Jest? - PullRequest
0 голосов
/ 18 января 2019

Предположим, у меня есть простой файл, экспортирующий функцию по умолчанию:

// UniqueIdGenerator.js
const uniqueIdGenerator = () => Math.random().toString(36).substring(2, 8);

export default uniqueIdGenerator;

Который я бы использовал так:

import uniqueIdGenerator from './UniqueIdGenerator';
// ...
uniqueIdGenerator();

Я хочу заявить в своем тесте, что этот метод был вызван при сохранении исходной функциональности. Я бы сделал это с jest.spyOn, однако для него требуются объект и имя функции в качестве параметров. Как это можно сделать чистым способом? Для тех, кто заинтересован, есть похожая проблема GitHub для jasmine.

1 Ответ

0 голосов
/ 18 января 2019

Все еще открыт для предложений, но я закончил тем, что отказался от экспорта по умолчанию:

// UniqueIdGenerator.js
export const uniqueIdGenerator = () => Math.random().toString(36).substring(2, 8);

И тогда я мог бы использовать и шпионить так:

import * as UniqueIdGenerator from './UniqueIdGenerator';
// ...
const spy = jest.spyOn(UniqueIdGenerator, 'uniqueIdGenerator');

Некоторые рекомендуют обернуть их в const-объект и экспортировать его.Я полагаю, вы также можете использовать класс для переноса.

Однако, если вы не можете изменить класс, есть еще (не очень приятное) решение:

import * as UniqueIdGenerator from './UniqueIdGenerator';
// ...
const spy = jest.spyOn(UniqueIdGenerator, 'default');
...