Ho una direttiva che inizializza l'oggetto Date più volte in diverse funzioni. Quando Unità testare le singole funzioni posso gestire spegnendo la data così:Date di derisione nei test 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);
});
Per unit testing della direttiva stessa, che chiama l'ageInYears e diverse altre funzioni simili questo non sta andando a lavorare come ho dopo una chiamata alla data() stubDateConstructor avrà resettato Data() all'oggetto Data reale.
C'è un modo nativo in AngularJS/Jasmine per gestire queste situazioni, o dovrei cercare in Sinon, ad esempio?
è albeggiare su di me, ora che potrei avere per inizializzare la data una volta e passare quella alle funzioni che la richiedono .. forse questa è la soluzione migliore? – Maarten
Sono un fan di Timecop.js me stesso. Qualsiasi libreria con funzioni come Timecop.travel e Timecop.freeze ottiene la mia approvazione. – ivarni
sembra che sinon.js possa anche fornire il time-mocking che si applica alle date (dipende dal supporto del browser) http://sinonjs.org/docs/#clock – ossek