2016-06-15 11 views
0

Die Funktion Ich möchte testen, ist meist reine JavaScript (Coffeescript), aber enthält eine Zeile, die JQuery-Rufe zu JQuery verspotten:Wie ohne einschließlich JQuery in meiner Spec-Datei auf allen

$("input##{name}").change -> 

I don‘ Ich möchte Jquery überhaupt in meine Jasmine-Dateien aufnehmen. Ich würde es gerne komplett ausspionieren, also ist das ein reiner Komponententest.

für diese Funktion My spec beinhaltet folgende Leistungen:

class $ 
    change:() -> 
    return 
spy = spyOn($, 'change') 

jedoch Jasmin mir diesen Fehler geben:

Error: change() method does not exist 

Wie kann ich $('input##{name}').change -> vollständig in Jasmin verspotten ohne JQuery sind in der Spezifikationsdatei?

Danke.

UPDATE

Aktualisierung hier, wie Sie nicht richtig Kommentare formatieren.

unten durch die Antworten inspiriert, sieht der Inhalt meines it Block nun wie folgt aus:

window.$ = (selector) -> 
    change: (callback) -> 
    spy = spyOn(window.$, "change") 
    ... 
    expect(spy).toHaveBeenCalledTimes(9); 

Aber ich bin immer:

Error: change() method does not exist

+0

Verwenden Sie Jasmin im Browser oder von der Befehlszeile? –

+0

Beide. Meine Funktionen, die JQuery nicht berühren, sind perfekt spezifiziert, einschließlich einer Funktion, in der ich 'spyOn (history, 'replaceState')' '. Sobald ich jedoch versuche, Funktionen zu spezifizieren, die JQuery aufrufen, indem ich JQuery verspottete, fällt alles auseinander. –

+0

Wenn Sie dies im Browser tun, dann empfehle ich @ fracz 'Antwort zu verwenden, aber setzen Sie die Mock-Funktion in ein Inline-Skript oben, wo alle Jasmin-Sachen im html '-Fenster enthalten sind. $ = Function() {return {change: Funktion() {}}; }; '. Dann können Sie es ausspionieren, um sicherzustellen, dass es angerufen wird. Nicht die sauberste Lösung, aber sollte funktionieren und viel weniger hässlich als alle Jquery für Unit-Tests enthalten. –

Antwort

1

Hinweis, dass es keine sein würde $.change Attribut, auch wenn Sie jQuery enthalten haben. $ ist eine Funktion, die ein Objekt mit dem Attribut change zurückgibt. Versuchen Sie:

jQuerySelectorMock = jasmine.createSpyObj('jQuerySelectorMock', ['change']) 
window.$ = -> jQuerySelectorMock 
# test code 
expect(jQuerySelectorMock.change).toHaveBeenCalledTimes(9) 
+0

Danke aber beide Optionen geben mir nur einen 'ReferenceError: $ ist nicht definiert' Fehler. –

+0

Es hängt davon ab, wie Ihr Code es verwendet. Versuchen Sie, 'window. $' Anstatt nur '$' zuzuweisen. – fracz