Как мне посмеяться над Date.toLocaleDateString в шутку? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть этот кодовый фрагмент в моем компоненте React, который в итоге отображает HTML:

new Date(createDate).toLocaleDateString()

У моей локальной машины и нашей сборочной машины установлены разные локали, поэтому результат этой функции не связно. Так что, как и следовало ожидать, модульное тестирование проходит на моем компьютере и не проходит на компьютере сборки, или наоборот.

Я хочу смоделировать «toLocalDateString», чтобы он всегда использовал один и тот же языковой стандарт, скажем «en- US 'или, по крайней мере, всегда возвращает одну и ту же строку. Наш тестовый фреймворк шутит. Как мне достичь этой цели?

Я попробовал это в своем тесте. c. js, но это никак не повлияло:

Date.prototype.toLocaleDateString = jest.fn().mockReturnValue('2020-04-15')
expect(component).toMatchSnapshot()

Я все еще получить ту же старую реализацию toLocalDateString в снимке, мой mockReturnValue не учитывается.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Хорошо ли работает любимый код? Я издеваюсь над объектом даты таким образом.

const realDateToLocaleDateString = Date.prototype.toLocaleDateString.bind(global.Date);
const toLocaleDateStringStub = jest.fn(() => '2020-04-15');
global.Date.prototype.toLocaleDateString = toLocaleDateStringStub;

const date = new Date();
console.log(date.toLocaleDateString()); // returns 2020-04-15

global.Date.prototype.toLocaleDateString = realDateToLocaleDateString;
0 голосов
/ 15 апреля 2020

Можете ли вы обернуть

new Date(createDate).toLocaleDateString()

в функцию, передать ее как реквизит компоненту, а затем высмеять?

...