[Jquery] Testen einer vollständigen Seitenumleitung in qUnit


Answers

Sie können window.location.href nicht ändern, ohne die Seite neu zu laden. Aber wenn Sie diese Art von Funktionen unbedingt testen möchten, erfordert dies ein wenig Logikänderung.

Beispiel 1:

Sie können dies mit zwei Funktionen tun, eine kann redirectTo ähnlich wie Ihre, und die andere kann die Logik der Gebäude und URL sein. So was:

// this function is so simple that you never need to unit test it
var redirectTo = function(url)
{
    window.location.href = url;
}

// if this function has any logic worth testing you can do that without redirects
var buildUrl = function(someParameters)
{
    // ....
    // here be some logic...
    // ....

    return "http://www.google.com";
}
  1. redirectTo (URL) -Funktion ist so einfach, dass Sie immer wissen, dass es funktioniert, ohne zu testen.
  2. buildUrl (someParameters) -Funktion kann Logik zum Erstellen einer URL enthalten, und Sie sollten dies testen. Und Sie können dies ohne die Seitenumleitung testen.

Beispiel # 2:

Sie können auch ein Kreuz zwischen diesen beiden schreiben:

// don't test this function as it will redirect
var redirect = function()
{
    window.location.href = buildUrl();
}

// if this function has any logic worth testing you can do that without redirects
var buildUrl = function()
{
    // ....
    // here be some logic...
    // ....

    return "http://www.google.com";
}

Das obige Beispiel wird die gleiche Form wie Ihre ursprüngliche Funktion haben, aber mit der URL-Aufbaulogik-Funktion, die Sie tatsächlich testen können.

Kein Beispiel, aber # 3:

Auf der anderen Seite, wenn Sie nicht Ihre Logik ändern möchten und Sie eine einfache Funktion haben, ist es kein Problem, wenn Sie es einfach nicht testen ...

Question

Ich habe folgende Funktion

var redirect = function() {
    window.location.href = "http://www.google.com";
}

Ich möchte diese Funktion mit qUnit testen.

Das Problem ist, wenn ich das HTML-Dokument, in dem meine Tests laufen, aufrufen, sobald es zu dem Test kommt, der redirect() aufruft, lädt der Browser google.com. Ich möchte irgendwie window.location.href ausspionieren, so dass es nicht umleitet, und so kann ich überprüfen, ob es auf den richtigen Wert gesetzt wurde.

Dies so zu schreiben, dass es besser überprüfbar wäre, wäre eine akzeptable Antwort und wird begrüßt. Da ich qUnit benutze, wäre eine gewisse jQuery-Magie angebracht, genauso wie einige altmodische Refactoring. Es wurde vorgeschlagen, einen benutzerdefinierten Setter für window.location.href hinzuzufügen, aber ich konnte nicht herausfinden, wie dies funktioniert.

Bitte, keine Vorschläge, das Verhalten meines Codes zu ändern.






Links