Dateオブジェクトをいくつかの関数で何度も初期化する指示があります。 私はこのような日付をスタブ扱うことができ、個々の機能テスト単位:ageInYearsや他のいくつかの類似の機能を呼び出すディレクティブ自体を単体テストするためにAngularJS/Jasmineテストの締め日
(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);
});
が、これは1つの呼び出した後、私と仕事に行くのではありませんto Date()stubDateConstructorはDate()を実際のDateオブジェクトにリセットします。
AngularJS/Jasmineには、これらの状況を処理するためのネイティブな方法がありますか?たとえばSinonを調べる必要がありますか?
とよく果たしているシステムのタイムゾーンまたは任意の他の依存関係
https://docs.angularjs.org/api/ngMock/type/angular.mock.TzDate
からの角度モックからヘルパー、本当に安全ガードあなたのテストとして来ます日付を一度初期化し、それを必要とする関数に渡すことができます。これが最善の解決策ですか? – Maarten
私はTimecop.jsのファンです。 Timecop.travelやTimecop.freezeのような関数を持つライブラリは私の承認を得ます。 – ivarni
sinon.jsのように見えるかもしれませんが、日付に適用されるタイムモッキングを提供する可能性があります(ブラウザのサポートに依存します)http://sinonjs.org/docs/#clock – ossek