2016-07-08 10 views
3

私は機能があります。SinonJS使用スタブは

var publish = function(a, b, c) { 
    main = a + getWriterName(b,c); 
} 

をしてgetWriterNameは別の関数である:

var getWriterName = function(b,c) { 
    return 'Hello World'; 
} 

は、私が「公開」機能をテストしたいが、私はしたくありません私が "publish"をテストしている間に "getWriterName"関数を実行してください。私は "公開"をテストするたびに実行したくないので、私はスタブgetWriterName関数のように感じますが、どうやってそれを行うのですか?私のようなものでした:

var sandbox = sinon.sandbox.create(); 
sandbox.stub(getWriterName).returns('done'); 

をしかし、これは私が書き込みパスにいる場合は、私のスタブと間違っている何

TypeError: Attempted to wrap undefined property undefined as function

の誤差を与えますか?

編集: 私はそうsinonドキュメントから

答えて

0

sinon.stub(someFile, 'getWriterName', function(b, c) { 
    return 'done' 
}); 

し、それを元に戻すことができます:あなたは上記の例のようにそれを行うだろうまずファイルを次のように再結びます:

var main = rewire('main'); 

次に、呼び出されている他の関数をスタブします私はgetWriterNameをスタブにしていた時に一つの機能、私の場合、私がやるだろう:

main.__set__('getWriterName', function(b, c) { 
    return 'Something Else' 
} 

をし、最後にそれを使用し終えた後、これはSinonはへのReWireで使用することができる方法である

main.restore(); 
0

を再配線使用したソリューションをご希望の再配線使用しています:「sinon.sandbox.create(config)方法は、ほとんどの統合機能であり、Sinon.JSのエンドユーザーとして、あなたはおそらく必要はありませんそれ。"

通常は、構文でsinonスタブを作成します。

​​

をあなたのテストでそれらをインポートするこの2つの機能

//somefile.js 
var publish = function(a, b, c) { 
    main = a + getWriterName(b,c); 
} 

var getWriterName = function(b,c) { 
    return 'Hello World'; 
} 
exports.getWriterName = getWriterName; 
exports.publish = publish; 

を輸出しているのは、ファイル内のどこかを言ってみましょう:

var someFile = require('./somefile.js'); 

あなたがしたいメソッドをスタブしようとしています:

sinon.stub(someFile, 'getWriterName', function(b, c) { 
    return 'done' 
}); 

これも機能しません。これは、必要なファイルのプロパティとしてアクセスできない限り、必要なメソッドを実際にスタブすることができないためです。あなたの中に機能を備えたファイルをインポートしたら、今getWriterNameが出てスタブのためにアクセス可能である

//somefile.js

var getWriterName = function(b,c) { 
    return 'Hello World'; 
} 
exports.getWriterName = getWriterName; 

var publish = function(a, b, c) { 
    main = a + exports.getWriterName(b,c); 
} 
exports.publish = publish; 

:これが機能するためには、あなたはこれをやっている必要があると思いますテスト。私の関数は、その後main.jsと呼ばれるファイルに記述されている場合

:これは私の問題を解決し

someFile.getWriterName.restore(); 
+0

私は申し訳ありませんが、 –

1

行います関数をスタブします。この場合のRewireは、スタブされた機能がプライベートである場合に特に便利です。

it('getWriteName always returns "Hello World"', function() {  
    var stub = sandbox.stub(); 
    stub.returns('Hello World'); 
    var unset = log.__set__('getWriterName', stub); 

    // your test and expectations here 

    unset(); 
    // it's always good to restore the previous state 
}); 
関連する問題