На вопрос, на который вы ссылаетесь, в настоящее время принят ответ, который не работает. Я добавил новый ответ с пояснением и рабочим примером.
Та же концепция применима и здесь: макет заменяет модуль экспорта функции, чтобы иметь возможность смоделировать countriesList
в getSortedCountryData
, вы должны вызвать экспорт модуля для countriesList
.
Один из вариантов - переместить countriesList
в собственный модуль.
Другой вариант - воспользоваться тем фактом, что «Модули ES6 поддерживают циклические зависимости автоматически» , поэтому вполне допустимо import
модуль в себя, чтобы вы могли вызвать Модуль экспорта для countriesList
:
countries.js
import * as countyListHelper from './countries';
export const countriesList = () => [
{
label: '+244',
value: 'Angola',
}, // list of all possible countries very long...
];
export const getSortedCountryData = intlLang =>
countyListHelper.countriesList()
.sort((compare, comparable) =>
compare.value.localeCompare(comparable.value, intlLang, { sensitivity: 'base' }));
countries.test.js
import * as countyListHelper from './countries';
describe('countries list', () => {
test('returns list of countries', () => {
const expectedList = [
{
label: '+244',
value: 'Angola',
},
{
label: '+43',
value: 'Austria',
},
];
const spy = jest.spyOn(countyListHelper, 'countriesList');
spy.mockReturnValue(expectedList);
expect(countyListHelper.getSortedCountryData('en')).toEqual(expectedList); // Success!
spy.mockRestore();
});
});