Дразнить только сегодняшнюю дату в Жасмине

0

Я пишу единичный тест Жасмин для функции, в которой сравниваются даты. Я хочу предоставить поддельную дату, которая будет использоваться на сегодняшний день. Поэтому я слежу за методом Date на объекте window и возвращает предопределенную дату.

Это работает отлично, но в функции, которую я тестирую, я также читаю даты из строки и вызывая new Date(yyyy, mm, dd) чтобы превратить их в даты. Когда это происходит, эти значения заменяются датой макета, которую я предоставил.

Вот пример:

var checkDate = function () {
            return { today: new Date(), anotherDay: new Date(2016, 0, 1) }
        };

var createDate = function (year, month, date) {
  var overrideDate = new Date(year, month, date);
  spyOn(window, 'Date').andCallFake(function () {
    return overrideDate;
  })
}

var dates;

describe("checkDate", function() {
  beforeEach(function() {
    createDate(2015, 11, 1);
    dates = checkDate();
  })
  it("today has a value of 12/1/2015", function() {
    expect(dates.today.toLocaleDateString()).toBe('12/1/2015');
  });
  it("anotherDay has a value of 1/1/2016", function() {
    expect(dates.anotherDay.toLocaleDateString()).toBe('1/1/2016');
  })
});

Здесь приведен пример JSFiddle.

Как я могу высмеять только сегодняшнюю дату и разрешить new Date(yyyy, mm, dd) для создания соответствующего объекта даты? Я ожидал бы, что оба теста в скрипке пройдут, т. anotherDay настроен на 1/1/2016 а today установлен на 12/1/2015.

Карма-Жасмин v 0.1.6.

Теги:
jasmine

1 ответ

2
Лучший ответ

Вы можете кэшировать window.Date чтобы использовать его, когда аргументы передаются в ваш макет

var windowDate = window.Date;
spyOn(window, 'Date').andCallFake(function (year,month,day) {
    if(year != undefined && month != undefined && day != undefined){
        return new windowDate(year,month,day);
        }
  return overrideDate;
})

https://jsfiddle.net/n3Lf0g8p/1/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню