2016-03-29 10 views
1

Ich teste eine Funktion. Diese Funktion hat einen Aufruf an ein externes Modul, das mein Test macht fehlschlagen:Wie sinon stub einen Anruf an externes Modul in einer getesteten Funktion

element.funcCall(); 

Wo die Funktion wie folgt aussieht:

function funcCall() { 
    external.a.b.c.doSomething(); 
} 

Es scheitert an: undefiniert ist kein Objekt (Bewertung ‚extern. abcdoSomething ')

Wie kann ich stub oder fake dies so den Anruf nicht wirklich machen. Ich brauche seine Funktionalität für diesen Test nicht.

Antwort

1

Hier ist, wie ich diese Art der Sache zu tun:

var element = require('element'), 
    external = require('external'), 
    sinon = require('sinon'), 
    expect = require('chai').expect; 

describe('element.funcCall()', function() { 

    before(function() { 
     this.doSomethingStub = sinon.stub(external.a.b.c, 'doSomething'); 
    }); 

    it('should do something external', function() { 
     element.funcCall(); 
     expect(this.doSomethingStub.called).to.be.true; 
    }); 

    after(function() { 
     this.doSomethingStub.restore(); 
    }); 

}); 
+0

Versuchte aber immer den gleichen Fehler bekommen. Ich habe es anders gelöst. – Alon

0

Hier ist, wie ich das am Ende zu lösen. Da ich kümmerte sich nicht um diese externe Funktion ausgeführt wird, gefälscht ich es wie so:

var func = function() {}; 
external = 
    { a: 
     { b: 
     { c: 
      {doSomething: func} 
      } 
     } 
    } 

... 
element.funcCall(); 
expect..... 

Dies war der interne Funktionsaufruf en leere Funktion umgeleitet wurde, und ich konnte den Rest des Verfahrens testen

Verwandte Themen