Javascript Unittest Шутка Интервал времени от одного дня

#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. Это работает, но мой ответ более полный, вы тестируете только один случай (не понедельник).