Jasmine.js Test - Spion am Fenster.öffnen
JS
var link = this.notificationDiv.getElementsByTagName('a')[0];
link.addEventListener('click', function (evt){
evt.preventDefault();
visitDestination(next);
}, false);
}
var visitDestination = function(next){
window.open(next)
}
Spec
var next = "http://www.example.com"
it( 'should test window open event', function() {
var spyEvent = spyOnEvent('#link', 'click' ).andCallFake(visitDestination(next));;
$('#link')[0].click();
expect( 'click' ).toHaveBeenTriggeredOn( '#link' );
expect( spyEvent ).toHaveBeenTriggered();
expect(window.open).toBeDefined();
expect(window.open).toBe('http://www.example.com');
});
Schreiben wie man die Skillung zu testen, wenn der link geklickt wird, ruft es visitDestination
und sorgt dafür window.open == next
? Wenn ich versuche zu laufen, die spec-es öffnet sich das neue Fenster.
InformationsquelleAutor baconck | 2016-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
So,
window.open
ist eine Methode des Browsers. Ich glaube es nicht, wird der Wert von selbst. Also diese:... ist zum scheitern verurteilt, egal was.
Was Sie wollen, ist erstellen Sie ein mock der Fenster.open-Methode:
Dies ermöglicht es Ihnen zu verfolgen, wenn es ausgeführt wurde. Es wird auch verhindern, dass die tatsächlichen
window.open
Funktion ausgeführt werden. So ein neues Fenster wird nicht geöffnet, wenn Sie den test ausführen.Als Nächstes sollten Sie testen, ob die
window.open
Methode ausgeführt wurde:Edit: Mehr detail. Wenn Sie möchten, um zu testen, ob visitDestination ausgeführt wurde, dann würde Sie tun:
Den
.and.callThrough()
ist hier wirklich wichtig. Wenn Sie verwenden Sie es nicht, dann die normalevisitDestination
wird ersetzen mit einem dummy - /mock-Funktion, die nichts tut.Sieht aus wie was auch immer browser Sie ausführen in " nicht definiert hat
window.open
. Sie können versuchenvar mySpy = jasmine.createSpy('name');
und dannwindow.open = mySpy
InformationsquelleAutor jlogan