2016-11-21 7 views
0

Ich versuche sinon.spy() zu verwenden, um zu überprüfen, dass eine Funktion aufgerufen wurde. Die Funktion heißt getMarketLabel und gibt marketLabel zurück und akzeptiert sie in der Funktion. Ich muss überprüfen, dass getMarketLabel aufgerufen wurde. Ich nenne tatsächlich getMarketLabel an einem Ort, etwa so: {getMarketLabel(sel.get('market'))} Der Code, den ich bisher habe, ist:Sinon Spion zu überprüfen Funktion wurde

describe('Check if it has been called',() => { 
    let spy; 
    beforeEach(() => { 
    spy = sinon.spy(getMarketLabel, 'marketLabel'); 
    }) 
    it('should have been called',() => { 
    expect(spy).to.be.calledWith('marketLabel'); 
    }); 
}); 

Dies ist der Fehler Ich erhalte: TypeError: Attempted to wrap undefined property marketLabel as function

Antwort

1

Sinon nicht auf Funktionen ausspionieren kann, dass sind keine Eigenschaft eines Objekts, da Sinon in der Lage sein muss, die ursprüngliche Funktion getMarketLabel durch eine ausgespähte Version dieser Funktion zu ersetzen.

Ein Arbeitsbeispiel:

let obj = { 
    getMarketLabel(label) { 
    ... 
    } 
} 
sinon.spy(obj, 'getMarketLabel'); 

// This would call the spy: 
obj.getMarketLabel(...); 

Diese Syntax (die nahe ist, was Sie verwenden) existiert auch:

let spy = sinon.spy(getMarketLabel); 

Allerdings löst dies nur den Code Spion, wenn explizit spy() Aufruf ; Wenn Sie getMarketLabel() direkt anrufen, wird der Spioncode überhaupt nicht aufgerufen.

Auch wird dies nicht funktionieren:

let getMarketLabel = (...) => { ... } 
let obj   = { getMarketLabel } 
sinon.spy(obj, 'getMarketLabel'); 

getMarketLabel(...); 

Weil du noch getMarketLabel direkt aufrufen.

+0

Bitte diese jsfiddle:


Der Inhalt helper.js sollte https://jsfiddle.net/hv8mLwcL/ – DaveDavidson

+0

@DaveDavidson 'sinon.spy (getMarketLabel, 'marketLabel') 'ist ungültig:' getMarketLabel' ist kein Objekt und 'marketLabel' ist keine Funktion. – robertklep

0

Dies ist der Fehler, den ich erhalten: TypeError: Attempted to wrap undefined property marketLabel as function

Sie müssen die helper.js in Ihre Testdatei benötigen, dann die entsprechende Methode für das gewünschte Modul ersetzen und schließlich die Methode mit der ersetzt rufen Spion:

var myModule = require('helpers'); // make sure to specify the right path to the file 

describe('HistorySelection component',() => { 
    let spy; 
    beforeEach(() => { 
    spy = sinon.stub(myModule, 'getMarketLabel'); // replaces method on myModule with spy 
    }) 
    it('blah',() => { 
    myModule.getMarketLabel('input'); 
    expect(spy).to.be.calledWith('input'); 
    }); 
}); 

Sie können nicht testen, ob der Spion mit helpers.sel('marketLabel') genannt wird, da diese Funktion wird ausgeführt, bevor der Test durchgeführt wird. Sie werden daher durch Schreiben:

expect(spy).to.be.calledWith(helpers.sel('marketLabel'));

testen, dass der Spion mit dem, was zurückgegebene Wert von helpers.sel('marketLabel') genannt wird (die undefined Standardeinstellung). siehe

module.exports = { 
    getMarketLabel: function (marketLabel) { 
    return marketLabel 
    } 
} 
+0

Ich bin mir nicht sicher, was in der Hilfsdatei sein sollte. Derzeit habe ich folgendes: https://jsfiddle.net/8q1tLhs7/ Und ich bekomme immer noch den gleichen Fehler. – DaveDavidson

+0

@DaveDavidson: Siehe aktualisierte Antwort. Sie wissen nicht, warum Sie eine 'return {getMarketLabel}' -Datei verwenden, die eine ungültige Syntax ist. Ich habe es in 'return marketLabel' geändert. – rabbitco

+0

Dies funktioniert nicht für mich.Ich bekomme immer noch den gleichen Fehler. – DaveDavidson

Verwandte Themen