Я изо всех сил пытаюсь издеваться над константой с Jest для каждого теста. У меня он работает с кодом ниже, но макет статичен - я не могу издеваться над ним по-разному для каждого теста.
Код:
// allowList.ts
export const ALLOW_LIST = {
'1234': true
};
// listUtil.ts
import { ALLOW_LIST } from './allowList.ts';
export const checkList = (id: string) => {
if (ALLOW_LIST[id]) return true;
return false;
};
Тест (рабочий):
// listUtil.test.ts
import { checkList } from './listUtil';
jest.mock('./listUtil', () => {
return {
'5678': true
};
});
test('in list', () => {
expect(checkList('5678')).toBe(true);
});
test('not in list', () => {
expect(checkList('1234')).toBe(false);
});
Что хотелось бы (не работает):
// listUtil.test.ts
import { checkList } from './listUtil';
test('in list', () => {
jest.mock('./listUtil', () => {
return {
'5678': true
};
});
expect(checkList('5678')).toBe(true);
});
test('not in list', () => {
jest.mock('./listUtil', () => {
return {
'9123': true
};
});
expect(checkList('1234')).toBe(false);
});
Возможно ли то, что я пытаюсь сделать? Этот пост очень похож и, кажется, работает при имитации функций, но у меня та же проблема, что и у комментаторов принятого ответа. Думаю, я просто не понимаю, как Jest издевается под капотом. Я считаю, что рабочая версия работает, потому что макет поднят и в основном перезаписывает реальную реализацию, но я не уверен, как и смогу ли я добиться этого в каждом тесте.
Я думаю, что одним из вариантов было бы открыть ALLOW_LIST через функцию:
// allowList.ts
const ALLOW_LIST = {
'1234': true
};
export const getAllowList = () => ALLOW_LIST;
и издеваюсь над этим, но мне интересно, нужно ли это.