Макет конструктора даты с Жасмин
Я тестирую функцию, которая принимает дату как необязательный аргумент. Я хочу утверждать, что новый объект Date создается, если функция вызывается без аргумента.
var foo = function (date) {
var d = date || new Date();
return d.toISOString();
}
Как утверждать, что new Date
вызывается?
До сих пор у меня было что-то вроде этого:
it('formats today like ISO-8601', function () {
spyOn(Date, 'prototype');
expect().toHaveBeenCalled();
});
Смотрите: https://github.com/pivotal/jasmine/wiki/Spies
Ответы
Ответ 1
Кредит @HMR. Тест, который я написал, чтобы проверить:
it('Should spy on Date', function() {
var oldDate = Date;
spyOn(window, 'Date').andCallFake(function() {
return new oldDate();
});
var d = new Date().toISOString;
expect(window.Date).toHaveBeenCalled();
});
Ответ 2
из примера жасмина,
jasmine.clock().install();
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();
});
дата жасмина
Ответ 3
для меня это сработало с:
spyOn(Date, 'now').and.callFake(function() {
return _currdate;
});
вместо .andCallFake
(используя "grunt-contrib-jasmine": "^ 0.6.5", который, как представляется, включает жасмин 2.0.0)
Ответ 4
Для пользователей, которые используют Edge-версию Jasmine:
it('Should spy on Date', function() {
var oldDate = Date;
// and.callFake
spyOn(window, 'Date').and.callFake(function() {
return new oldDate();
});
var d = new Date().toISOString;
expect(window.Date).toHaveBeenCalled();
});
Ответ 5
это сработало для меня
var baseTime = new Date().getTime();
spyOn(window, 'Date').and.callFake(function() {
return {getTime: function(){ return baseTime;}};
});