2017-02-27 6 views
1

これまで、私はsinonを使用して、nodeJSコードに含まれるオブジェクトの関数呼び出しをスタブアウトしています。私は今、ライブラリは、私はニーズがそうのように呼ばれるように含めていたシナリオを直撃しているスタビライザライブラリコンストラクタはsinonで呼び出します

var request = require('request'); 
//Somewhere further below in my tests: 
postStub = sinon.stub(request, 'post'); 

:私は、要求のライブラリを使用し、ので、私のテストで、私は、HTTPをスタブアウトすることができる。例えば

は次のように呼び出します私の実際のコードで:

var archiver = require('archiver'); 
//Further below in actual code (express middleware) 
var zip = archiver('zip'); 
zip.pipe(res); 

私はアーカイバライブラリ上のpipe()への呼び出しをスタブアウトすることができるようにしたいが、私は最初のコンストラクタ呼び出しスタブアウトする必要があると思う - archiver('zip')を?

私は周りに検索があり、私はsinonのcreateStubInstanceがここで助けになると思うが、私は100%確信していない。

誰かが助けることができますか? ありがとう

答えて

0

私はやったことがうまくいかないようです。 stubbableライブラリ関数をエクスポート可能な別のメソッドでラップします。

file.js

exports.originalMethod = function() { 
    var archiver = require('archiver'); 
    //Further below in actual code (express middleware) 
    var zip = exports.newArchiverMethod('zip'); 
    zip.pipe(res); 
} 
exports.newArchiverMethod = function(arg) { 
    return archiver(arg); 
} 

このnewArchiverMethodは、スタブすることができます。

spec.js

archiverStub = sinon.stub(controller, 'newArchiverMethod'); 

それは新しいエクスポート方法を追加し、それが不要に元のファイル内の混乱、ならびに非検証可能なラインを作成しますので、それは完璧ではありません。 しかし、この1行を過ぎて、残りの長いメソッドをテストできるようにします。

関連する問題