Stubbing Fenster.Lage.href mit Sinon
Ich versuche zu testen, einige client-side code und für das brauche ich ein stub der Wert window.location.href
Eigenschaft mit Mokka - /Sinon.
Was ich bisher versucht habe (mit diesem Beispiel):
describe('Logger', () => {
it('should compose a Log', () => {
var stub = sinon.stub(window.location, 'href', 'http://www.foo.com');
});
});
Den Läufer zeigt den folgenden Fehler:
TypeError: Benutzerdefinierte stub sollte eine Funktion oder eine property descriptor
Änderung der test-code:
describe('Logger', () => {
it('should compose a Log', () => {
var stub = sinon.stub(window.location, 'href', {
value: 'foo'
});
});
});
Ergibt diesen Fehler:
TypeError: es wurde Versucht, wrap-string-Eigenschaft "href" als Funktion
Übergeben Sie eine Funktion als drittes argument sinon.stub
funktioniert auch nicht.
Gibt es einen Weg, um eine gefälschte window.location.href
string, auch die Vermeidung der Umleitung (da bin ich auf das testen im browser)?
InformationsquelleAutor der Frage Francesco Pezzella | 2016-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stubs ersetzt nicht die Attribute, Funktionen.
Den Fehler ausgelöst, verstärkt dies:
Aus der Dokumentation:
http://sinonjs.org/releases/v2.0.0/stubs/
Mögliche Lösung
Während viele builtin-Objekte ersetzt werden können (zum testen) einige können nicht. Für diejenigen Attribute, die Sie erstellen könnten, Fassaden-Objekte aus, die Sie dann in Ihrem code verwenden und in der Lage, Sie zu ersetzen in tests.
Beispiel:
Verwendung:
Können Sie dann in Ihrem test schreiben
Hinweis: die verkettete
returns()
nennen. Es war noch ein Fehler in deinem code: das Dritte argument ist eine Funktion, die keinen Wert auf einen anderen Typ. Es ist ein callback, nicht das, was das Attribut zurückgegeben werden soll.Dass der Quellcode von
stub()
InformationsquelleAutor der Antwort try-catch-finally
Müssen Sie
global
zu verspotten, diewindow
Objekt für den test inbeforeEach
oderit
z.B.
InformationsquelleAutor der Antwort KhaledMohamedP
Verwenden
window.location.assign(url)
anstelle von überschreiben der Wertwindow.location
. Dann können Sie einfach die stubassign
Methode auf diewindow.location
Objekt.http://www.w3schools.com/jsref/met_loc_assign.asp
InformationsquelleAutor der Antwort Danny Andrews