Жасмин шпионит за новым свиданием в JavaScript

Я выполняю модульное тестирование кода моего клиента в angulajs, и я понимаю, что этот код означает

 var newdate = new Date(2013,6,29);
    spyOn(Date.prototype, 'getTime').and.callFake(function() {
          return newdate;
        });

мы имитируем метод getTime() объекта Date. но вместо этого я хочу издеваться над новой датой(). например, код, который я хочу протестировать, содержит эту строку

payload.created_at = new Date();

У меня нет доступа к payload.created_at. поэтому я хочу сказать Жасмин, что всякий раз, когда вы видите новую дату (), замените ее на дату, которую я вам дам. Так что я думал о чем-то вроде, но это не работает.

spyOn(Date.prototype, 'new Date').and.callFake(function() {
          return newdate;
        });

но новая дата не является методом даты. Пожалуйста, может кто-нибудь помочь мне понять это? спасибо


person user3137376    schedule 02.06.2015    source источник


Ответы (2)


API Jasmine Clock позволяет имитировать функциональность даты JavaScript без ручного написание шпиона для этого.

В частности, прочитайте раздел об насмешке над датой.

describe("Mocking the Date object", function(){
    beforeEach(function() {
      jasmine.clock().install();
    });

    it("mocks the Date object and sets it to a given time", function() {
      var baseTime = new Date(2013, 9, 23);

      jasmine.clock().mockDate(baseTime);

      jasmine.clock().tick(50);
      expect(new Date().getTime()).toEqual(baseTime.getTime() + 50);
    });

    afterEach(function() {
      jasmine.clock().uninstall();
    });
});
person johnmcase    schedule 02.06.2015

поэтому эта ссылка [Конструктор фиктивной даты с Jasmine содержит ответ, но он у меня почему-то не работал. Я думаю, это может быть связано с моей версией жасмина, но ниже приведен код, который сработал для меня.

var oldDate = new Date();
    spyOn(window, 'Date').and.callFake(function() {
      return oldDate;
    });

есть разница в .and.callFake кода выше и в ссылке выше. Спасибо

person user3137376    schedule 02.06.2015