我正在测试一个将日期作为可选参数的函数。我想声明如果在没有参数的情况下调用函数,则会创建一个新的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();
});
答案 0 :(得分:50)
来自茉莉花的例子,
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();
});
答案 1 :(得分:11)
归功于@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 :(得分:7)
对我而言,它适用于:
spyOn(Date, 'now').and.callFake(function() {
return _currdate;
});
而不是.andCallFake
(使用" grunt-contrib-jasmine":" ^ 0.6.5",似乎包含jasmine 2.0.0)
答案 3 :(得分:2)
var baseTime = new Date().getTime();
spyOn(window, 'Date').and.callFake(function() {
return {getTime: function(){ return baseTime;}};
});
答案 4 :(得分:1)
对于使用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();
});