У меня есть функция момента для форматирования даты, получаемой с сервера, в миллисекундах.Я пытаюсь провести тесты с помощью 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
, но я не совсем понял.
Можеткто-нибудь поможет?Я новичок в тестировании ... и я очень расстроен, потому что у меня нет причины, почему это не удалось.Спасибо !!