Как проверить значения, которые зависят от локализации фермента? - PullRequest
0 голосов
/ 27 мая 2020

Как проверить значения, которые могут зависеть от текущей локализации?

function DateNavigation({ locale, date }) {
  return (locale === 'en')
    ? <span>{moment(date).format('DD.MM.YYYY')}</span>
    : <span>{moment(date).format('YYYY.MM.DD')}</span>
}

Этот тест иногда не работает из-за местоположений

it('display date correctly', () => {
    const component = mount(<DateNavigation date={'2022-01-31'} />);

    expect(component.html()).toEqual("<span>31.01.2022</span>");
});

1 Ответ

1 голос
/ 01 июня 2020

Вы можете использовать jest.mock (moduleName, factory, options) для имитации moment(), moment().format() функций и их возвращаемого значения. Результаты тестирования должны быть предсказуемыми. Для теста около date нам нужно сделать так, чтобы тестовый пример возвращал определенное значение в разных системах, часовых поясах и локализации.

Например

DateNavigation.jsx:

import React from 'react';
import moment from 'moment';

function DateNavigation({ locale, date }) {
  return locale === 'en' ? (
    <span>{moment(date).format('DD.MM.YYYY')}</span>
  ) : (
    <span>{moment(date).format('YYYY.MM.DD')}</span>
  );
}

export default DateNavigation;

DateNavigation.test.jsx:

import DateNavigation from './DateNavigation';
import moment from 'moment';

jest.mock('moment', () => {
  const mMoment = { format: jest.fn() };
  return jest.fn(() => mMoment);
});

describe('62042433', () => {
  it('display date correctly', () => {
    const date = '31.01.2022';
    moment().format.mockReturnValueOnce(date);
    const component = mount(<DateNavigation date={'2022-01-31'} locale={'en'} />);
    expect(component.html()).toEqual('<span>31.01.2022</span>');
    expect(moment).toBeCalledWith('2022-01-31');
    expect(moment().format).toBeCalledWith('DD.MM.YYYY');
  });
});

результаты модульного тестирования:

 PASS  stackoverflow/62042433/DateNavigation.test.jsx (13.544s)
  62042433
    ✓ display date correctly (54ms)

--------------------|---------|----------|---------|---------|-------------------
File                | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
--------------------|---------|----------|---------|---------|-------------------
All files           |     100 |       50 |     100 |     100 |                   
 DateNavigation.jsx |     100 |       50 |     100 |     100 | 6                 
--------------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        15.23s
...