Я недавно начал писать юнит-тесты и столкнулся с проблемой. Итак, я использую пакеты react-datepicker
и material-ui
в своем маленьком проекте.
Вот мой DatePickerItem
компонент ниже:
import Grid from "@material-ui/core/Grid/Grid";
import DatePicker, { registerLocale } from "react-datepicker";
import React from "react";
import { subDays } from "date-fns";
import ru from "date-fns/locale/ru";
registerLocale("ru", ru);
type Props = {
selectedDate: Date;
setDate: (date: Date) => void;
};
const DEMO_LIFE_TIME = 7;
export const DatePickerItem: React.FC<Props> = ({ setDate, selectedDate }) => {
const rangeStartDate = subDays(new Date(), DEMO_LIFE_TIME);
const rangeEndDate = new Date();
return (
<Grid item xs={6}>
<DatePicker
locale="ru"
selected={selectedDate}
minDate={rangeStartDate}
maxDate={rangeEndDate}
showTimeSelect
timeFormat="HH:mm"
timeIntervals={1}
dateFormat="dd.MM.yyyy HH:mm"
onChange={(date: Date) => setDate(date)}
/>
</Grid>
);
};
Этот компонент используется, чтобы позволить пользователю выбрать дату. Я создал следующий тест для этого компонента:
import React from "react";
import { shallow, ShallowWrapper } from "enzyme";
import { subDays } from "date-fns";
import Grid from "@material-ui/core/Grid/Grid";
import DatePicker from "react-datepicker";
import { configure } from "enzyme";
import Adapter from "enzyme-adapter-react-16";
import { DatePickerItem } from "../DatePickerItem";
configure({ adapter: new Adapter() });
const DEMO_LIFE_TIME = 7;
describe("Datepicker component", () => {
let component: ShallowWrapper;
const createComponent = (props = {}) => {
const selectedDate = new Date();
const setDate = jest.fn();
return shallow(
<DatePickerItem
setDate={setDate}
selectedDate={selectedDate}
{...props}
/>
);
};
afterEach(() => {
component.unmount();
});
it("should render changed startDate", () => {
const event = {
target: {
value: subDays(new Date(), DEMO_LIFE_TIME - 4)
}
};
const setDateMock = jest.fn();
component = createComponent({
setDate: setDateMock
});
const gridContainer = component.find(Grid);
const datePickers = gridContainer.find(DatePicker);
const firstDatePicker = datePickers.at(0);
firstDatePicker.simulate("change", event);
expect(setDateMock).toBeCalledTimes(1);
expect(firstDatePicker.props().minDate).toEqual(event.target.value);
});
});
Я ожидаю, что значение свойства minDate
будет изменено после вызова метода onChange
, но, к сожалению, мой Тест не работает правильно.
Я хотел бы выяснить причину, по которой мой тест не работает правильно. Заранее спасибо за любую помощь.