Функция Jest-тестирования, включающая текущую дату - PullRequest
0 голосов
/ 15 мая 2019

У меня есть функция, которая проверяет, совпадает ли параметр с сегодняшним днем ​​или позже, в моей функции я использовал new Date (), вот так

import moment from "moment";

const validateDate = ({ date }) => {
  return moment(date, "DD-MM-YYYY").isSameOrAfter(
    moment(new Date(), "DD-MM-YYYY", "days")
  );
};

export default validateDate;

Мой тест будет выглядеть так:

import validateDate from "./index";

it("is same or after today", () => {
  expect(validateDate({ date: "16-05-2019" })).toBeTruthy();
});

Проблема в том, что тест не пройдет 17-05-2019. Как решить эту проблему?

Я попробовал эту идею, но не уверен, нормально ли это или нет.

const validateDate = ({ date, today = new Date() }) => {
      return moment(date, "DD-MM-YYYY").isSameOrAfter(
        moment(today, "DD-MM-YYYY", "days")
      );
    };

Мой тест:

expect(validateDate({ date: "16-05-2019" }, today: new Date())).toBeTruthy();

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы можете смоделировать объект Date, чтобы убедиться, что new Date() возвращает дату условия.

global.Date = class extends RealDate {
  constructor() {
    super();
    return new RealDate(isoDate);
  }
};

Просто перезапишите глобальный объект Date перед тестом, а затем восстановите его после завершения теста.

Финальный код:

describe("validateDate", () => {
  const RealDate = Date;

  function mockDate(isoDate) {
    global.Date = class extends RealDate {
      constructor() {
        super();
        return new RealDate(isoDate);
      }
    } as any;
  }

  afterEach(() => {
    global.Date = RealDate;
  });

  it("should return true", () => {
    mockDate(moment("15-05-2019", "DD-MM-YYYY").toISOString());
    expect(validateDate({date: "16-05-2019", today: new Date()})).toBeTruthy();
  });
});
0 голосов
/ 15 мая 2019

Я бы попытался указать динамическую дату для теста Например, первый тест будет дан сегодня как дата, а второй будет вчера, со следующим кодом: moment().subtract(1, 'days').valueOf()

Более подробный пример:

desc("is same or after today", () => {
  it('should return true for today', () => {
    expect(validateDate({
      date: moment().format('DD-MM-YYYY').valueOf()
    })).toBeTruthy();
  })

  it('should return true for yesterday', () => {
    expect(validateDate({
      date: moment().subtract(1, 'days').format('DD-MM-YYYY').valueOf()
    })).toBeTruthy();
  })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...