2016-05-09 3 views
0

Ich habe eine JavaScript-Datei main_one.js, die eine andere JavaScript-Datei helper.js benötigt.Capture ein Argument übergeben, um Funktion in anderen JavaScript-Datei mit Jasmine

helper.js

warp = { 
    postThisEvent: function(a) { 
    // some operation on a 
    } 
}; 

main_one.js

var Helper = require('path/helper.js'); 
// some steps 
Helper.warp.postThisEvent(event); 

Ich möchte event mit Jasmin erfassen. Wie erstelle ich mein Spy-Objekt zur Erfassung event in ?

+0

Haben Sie etwas wollen mit 'event' zu tun, oder einfach nur beweisen, dass es mit' event' genannt wurde ? Was versuchst du im Test zu beweisen? Verwenden Sie Event für irgendetwas im Test? – Shakespeare

+0

Das Ereignis wird an externen Code gesendet. Das Ereignis hat eine Reihe von Eigenschaften. Ich möchte überprüfen, dass alle erforderlichen Eigenschaften vor dem Senden des Ereignisses festgelegt sind. –

Antwort

0

Im Jasmin Test erfordern Helper, dann spionieren auf diese Weise:

spyOn(Helper.warp, "postThisEvent").and.callThrough(); 

Diese postThisEvent auf das Objekt Helper.warp mit einer Spion-Funktion ersetzt. Wenn es angerufen wird, registriert der Spion den Anruf und ruft dann die ursprüngliche Methode auf, wie dies von callThrough() angewiesen wurde.

Dann können Sie erwarten, dass postThisEvent() mit den erwarteten Objekte auf diese Weise aufgerufen wurde:

expect(Helper.warp.postThisEvent).toHaveBeenCalledWith(jasmine.objectContaining({ 
    someProperty: "someValue" 
})); 

jasmine.objectContaining() ist ein Helfer, der nur testen, dass die expecte Eigenschaften unter mehreren Eigenschaften des zu prüfenden Objekt vorhanden sind.

Sie können auch komplexe Objekte direkt inspizieren:

expect(Helper.warp.postThisEvent.calls.mostRecent().args[0].someProperty).toBe("someValue"); 

Hinweis, dass eine solche Spion arbeiten möglicherweise nicht, wenn postThisEvent() auf eine Variable gespeichert wurde, die dann wie folgt aufgerufen:

var postThisEvent = Helper.warp.postThisEvent; 
function triggering() { 
    postThisEvent({ someProperty: "someValue" }) 
} 
// now a spy is created and then triggering() is called 

In dieser Fall, dass der Hinweis auf die ursprüngliche Methode beim Spionieren nicht erreicht werden kann. Es gibt keine Möglichkeit, die Funktion/Methode in diesem Fall in Javascript abzufangen.

Siehe

Verwandte Themen