我在angulajs中对我的客户端代码进行单元测试,我理解这段代码意味着
var newdate = new Date(2013,6,29);
spyOn(Date.prototype, 'getTime').and.callFake(function() {
return newdate;
});
我们模拟Date对象的getTime()方法。但我想模仿新的Date()而不是。例如,我想测试的代码包含这一行
payload.created_at = new Date();
我无法访问payload.created_at。所以我想告诉茉莉每当你看到新的Date()时,用我给你的给定日期替换它。所以我在考虑类似但不起作用的东西。
spyOn(Date.prototype, 'new Date').and.callFake(function() {
return newdate;
});
但新的日期不是日期的方法。请有人帮我解决这个问题吗?感谢
答案 0 :(得分:8)
Jasmine Clock api允许您伪造JavaScript日期功能而无需为其手动编写间谍。
请特别阅读有关mocking the date。
的部分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();
});
});
答案 1 :(得分:1)
所以这个链接[Mock date constructor with Jasmine有答案,但由于某些原因它不适合我。我想这可能与我的茉莉花版本有关,但下面是适用于我的代码
var oldDate = new Date();
spyOn(window, 'Date').and.callFake(function() {
return oldDate;
});
上面代码的.and.callFake与上面链接中的代码存在差异。感谢