#javascript #unit-testing #jestjs
Вопрос:
Я застрял с проверкой своего Интервала с одного дня. Может быть, кто-нибудь сможет объяснить мне, что я делаю не так.
Это то, что я хочу проверить
export const getMondayFromDay = (date) => {
const monday = new Date(date);
const day = monday.getDay();
monday.setDate(monday.getDate() - day (day === 0 ? -6 : 1));
monday.setHours(0, 0, 0, 0);
return monday;
}
Мой проваленный тест
it("returns day interval from monday", () => {
const mockMondayFromDay = new Date('2021-01-04');
const expectedFrom = new Date('2021-01-04');
expectedFrom.setHours(0, 0, 0, 0);
const expectedTo = new Date('2021-01-04');
expectedTo.setHours(23, 59, 59, 999);
jest.fn(() => mockMondayFromDay);
const { from , to } = getMondayFromDay(new Date('2021-01-04'));
expect(from).toEqual(expectedFrom);
expect(to).toEqual(expectedTo);
});
Ответ №1:
Ваша getMondayFromDay
функция возвращает только одну дату (предыдущий понедельник (или день, если это уже понедельник), в соответствии с указанной датой).
Так from
и to
не определены здесь: const { from , to } = getMondayFromDay(new Date('2021-01-04'));
.
Ваши тесты могут быть:
// test if the same date is returned if it's a monday
const monday = getMondayFromDay(new Date('2021-01-04'));
expect(monday).toEqual(expectedFrom);
// test if the previous monday is returned if the date is not a monday
const monday2 = getMondayFromDay(new Date('2021-01-05'));
expect(monday2).toEqual(expectedFrom);
Ответ №2:
Теперь у меня есть решение:
it("returns day interval from monday", () => {
const expectedFrom = new Date('2021-06-14');
expectedFrom.setHours(0, 0, 0, 0);
const expectedTo = new Date('2021-06-14');
expectedTo.setHours(23, 59, 59, 999);
const monday = getMondayFromDay(new Date('2021-06-16'));
expect(monday.getDate()).toEqual(14);
expect(monday.getMonth()).toEqual(5);
expect(monday.getFullYear()).toEqual(2021);
});
Комментарии:
1. Это работает, но мой ответ более полный, вы тестируете только один случай (не понедельник).