zu mock Ich habe eine Factory in Angular, die eine Funktion enthält, die eine Zeichenfolge als Argument erwartet, überprüft, ob diese Zeichenfolge als Get Parameter in der URL festgelegt ist Wert dieses Parameters, falls gesetzt.
Eine wirklich vereinfachte Version dieser Funktion in einer Art Pseudo-Code wie folgt aussieht
function getParameterValueByName(parameterName) {
url = $window.location.href;
if (parameterName is in url) {
return THE VALUE FROM parameterName;
}
}
In Jasmin Ich muss testen, was diese Funktionen für unterschiedliche URLs zurückgibt. Ich muss mehrere Tests mit unterschiedlichen Werten in $window.location.href
ausführen. Aber wie zum Schein $window.location.href
?
+++++
fand ich endlich einen Weg, es zu tun. Ich musste nur dieses Snippet hinzufügen. Und jedes Mal, wenn ich diese URL ändern möchte, erstelle ich einfach einen neuen beschreibenden Block.
beforeEach(module('myApp', function ($provide) {
$provide.value('$window', {location: {href: 'https://www.example.com?foo=bar&foo2=bar2'}});
}));
Erstellen Sie ein Objekt '$ window' und fügen Sie' location' Eigenschaft dann die ' href 'Eigenschaft zu' location'. Dein Code erhält nur einen Wert, also musst du nur sicherstellen, dass er existiert. Dann können Sie den Wert auf alles einstellen, was Sie zum Testen Ihrer Funktion benötigen. – GillesC
Ich weiß nicht, ob ich das richtig verstanden habe, aber wenn ich nur ein Objekt wie Sie vorgeschlagen habe, wird innerhalb der Funktion Jasmine immer noch die localhost URL verwenden, auf der Karma läuft. – mkoala