2014-10-02 17 views
12

Testuję funkcję, która przyjmuje datę jako opcjonalny argument. Chcę potwierdzić, że nowy obiekt Date jest tworzony, jeśli funkcja jest wywoływana bez argumentu.Makieta konstruktor daty z Jasmine

var foo = function (date) { 
    var d = date || new Date(); 
    return d.toISOString(); 
} 

Jak mogę stwierdzić, że jest wywoływana new Date?

tej pory mam coś takiego:

it('formats today like ISO-8601', function() { 
    spyOn(Date, 'prototype'); 
    expect().toHaveBeenCalled(); 
}); 

Patrz: https://github.com/pivotal/jasmine/wiki/Spies

+0

Nie szpiedzy to zrobić? Nie jestem pewien, czy musisz kpić z randki. Czy naprawdę martwisz się, że wpadniesz i zaczniesz wracać dzień temu? https://github.com/pivotal/jasmine/wiki/Spies –

+2

Czy to działa? spyOn (okno, "Date") – HMR

+0

W rzeczywistości otrzymywałem różne daty. Strefa czasowa ... – Rimian

Odpowiedz

7

zgłosił @HMR. Test pisałem do sprawdzenia:

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(); 
    }); 
+0

Z takim rozwiązaniem "Date.prototype" zostaje zastąpiony przez "szpiega", czy jest też czas na obejście tego problemu? – tomalec

+2

dla użytkowników, którzy korzystają z wersji krawędzi * Jasmine *: ' to ('Gdyby szpiegować Data', function() {var oldDate = data; // and.callFake spyOn (okno 'Data') .and.callFake (funkcja() { powrotu nowy oldDate(); }); var d = New Data() toISOString;. spodziewać (window.Date) .toHaveBeenCalled(); }); ' –

+0

To nie jest droga! użyj zamiast tego jaśmin.clock() –

4

dla mnie to działało z:

spyOn(Date, 'now').and.callFake(function() { 
    return _currdate; 
    }); 

zamiast .andCallFake (używając "grunt-contrib-jaśmin": "^ 0.6.5", który wydaje się zawierać jaśmin 2.0.0)

2

dla użytkowników, którzy korzystają z wersji krawędzi 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(); 
}); 
22

z jaśminowym przykład

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(); 
}); 

jasmine date

1

ten pracował dla mnie

var baseTime = new Date().getTime(); 
spyOn(window, 'Date').and.callFake(function() { 
    return {getTime: function(){ return baseTime;}}; 
});