2016-03-29 3 views
1

私は関数をテストしています。 「外部評価(未定義のオブジェクトではありません。テストされた関数の外部モジュールへの呼び出しをスタブする方法

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

それは上の失敗:関数は次のようになります

element.funcCall(); 

:この関数は、私のテストは失敗になり、外部モジュールへの呼び出しがあります。

これをスタブまたはフェイクして、呼び出しが実際に行われないようにするにはどうすればいいですか?私はそれがこのテストのための機能性を必要としません。ここで

答えて

1

は、私はこの種のものを行う方法は次のとおりです。ここで

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

の残りの部分をテストすることができ同じエラーが発生し続けました。私はそれを別の方法で解決しました。 – Alon

0

は、私がこれを解決することになった方法です。私はその外部関数が実行されて気にしませんでしたので、私はそうのようにそれを偽造:

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

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

この内部関数呼び出しが空の関数途中にリダイレクトしていたと私は方法しようとしました