Шут |Проверьте, была ли вызвана функция момента и верен ли возвращаемый результат - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть функция момента для форматирования даты, получаемой с сервера, в миллисекундах.Я пытаюсь провести тесты с помощью Enzyme и Jest, если moment function был вызван (1), и если выход вызванной функции является ожидаемым.

Вот мой компонент:

/* eslint-disable react/default-props-match-prop-types */
import React, { Fragment } from 'react';
import moment from 'moment';
import ILicense from 'user/dto/ILicense';

export interface Props {
  license?: ILicense;
}

const LicenseInfo = <T extends object>({ license }: Props & T): JSX.Element => (
  <Fragment>
        <table className="table col-6 my-5">
          <tbody>
            <tr>
              <td>Valid Until:</td>
              <td className="font-weight-bold" id="expiry">
                {moment(expiredAt).format('YYYY-MM-DD HH:mm:ssZZ')}
              </td>
            </tr>
          </tbody>
        </table>
      </Fragment>
);

ComponentMoment.defaultProps = {
  expiredAt: null,
};

export default ComponentMoment;

А вот мой тест:

  it('expect to show the expiration date if expiredAt is provided', () => {
    const moment = jest.mock('moment', () => () => ({ format: () => '2019–02–28T23:59:58' }));

    const license = {
      expiredAt: 1551391198000,
    };
    const wrapper = mount<ComponentMoment>(<ComponentMoment license={license}>Test</ComponentMoment>);
    wrapper.instance();
    expect(moment).toHaveBeenCalled();
  });

Этот тест в настоящее время не проходит с:

MatchError: Value must be a mock or a spy, and a huge object with various jest functions.

Что касается второго теста, проверьте фактическое время, я получу числовместо строки назад и toString не работает.

Я также читал эту статью о моментальном тестировании https://medium.com/front-end-weekly/mocking-moment-js-in-jest-a-simple-one-line-solution-61259ffaaa2, но я не совсем понял.

Можеткто-нибудь поможет?Я новичок в тестировании ... и я очень расстроен, потому что у меня нет причины, почему это не удалось.Спасибо !!

1 Ответ

0 голосов
/ 22 февраля 2019

Как я уже упоминал в комментариях, я считаю, что вы хотите, чтобы формат создавался с помощью jest.fn (), а затем прикреплял его к объекту момента.

https://jestjs.io/docs/en/expect.html#tohavebeencalled

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...