我有一个指令在几个函数中多次初始化 Date 对象。当对单个函数进行单元测试时,我可以像这样处理存根日期:
(function (global) {
var NativeDate = global.Date;
global.stubDateConstructor = function (fakeDate) {
global.Date = function () {
global.Date = NativeDate;
return fakeDate;
}
}
}(this));
// ageInYears()
it("should return the age in years of the person given his/her birthdate", function() {
stubDateConstructor(new Date('2010/01/01'));
expect(ageInYears('01-01-1990')).toBe(20);
stubDateConstructor(new Date('2010/01/01'));
expect(ageInYears('01-01-1900')).toBe(110);
});
对于调用ageInYears 和其他几个类似函数的指令本身的单元测试,这将不起作用,因为我在一次调用Date() stubDateConstructor 后会将Date() 重置为真实的Date 对象。
AngularJS / Jasmine 中是否有本地方式来处理这些情况,或者我应该研究一下Sinon,例如?