2017-05-17 3 views
0

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

+0

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

+0

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

Antwort

1

Es gibt jede Menge Möglichkeiten, dies zu erreichen, aber ich würde sagen, dass der beste Weg, eine kleine Fabrik für Fenster zu machen sei selbst:

function getParameterValueByName(parameterName) { 

    url = getWindow().location.href 

    if (parameterName is in url) { 

    return THE VALUE FROM parameterName; 

    } 

function getWindow(){ 
return $window.location.href; 

} 

Und wenn Mocking:

function getWindow(){ // in your test 
return { 
    location:{ 
     href:"What ever mock href u want" 
    } 
    } 

} 
+0

Können Sie genauer sein? Wo muss ich diesen Mock hinzufügen? Auch ich denke 'url = getWindow(). Location.href' sollte 'url = getWindow();' sein? – mkoala

Verwandte Themen