2017-12-09 20 views
0

私は誰かが小さな問題で私を助けることができると思っています。私は簡単なテストケースでこれをしようとしています、関数の中に住ん未定義のプロパティをスタブアウトし、既知の値を返すようにしようとしています:Sinon JSスタッフィング/定義されていないプロパティを嘲笑

var self = this; 


self.test = function() { 
    return person.myId(); 
}; 


if (typeof module !== "undefined" && module.hasOwnProperty("exports")) { 
    module.exports = self; 
} 


return self; 

私は何をしようとしたことは次のとおりです。

it('Basic stub test', function() { 
    sinon.stub(code, 'person.myId').return("1234"); 
    assert(code.test(), "1234"); 
}); 

私はperson.myId()への呼び出しをスタブすることを望んでいましたが、何もエラーが出ません:存在しないプロパティperson.myIdをスタブできません。

私たちは依存関係注入を処理するソフトウェアを使用しています(たとえば、ソフトウェア担当者の実行時に利用可能になっています)が、ソフトウェアの外に単体テストテストを書くことを試みているため、欠落している依存関係を取り除く必要があります。

誰もこの種のことを以前に試みたことがありますか?私はできないことをしようとしていますか?

ご協力いただきありがとうございます。

サム

+0

人がコードで定義されていますか? –

+0

personは、カスタムソフトウェアを使用して実行時に挿入され、スクリプトで使用できるオブジェクトです。 –

+0

上記のコードに追加することは可能ですか? –

答えて

0

私は、依存性注入のソフトウェアはありませんので、ここでミドルアース答えは魔法の種類がわかりません。

あなたの特定の質問に合っていますが、テストしたいコードを変更していると、コードの匂いになりやすいので、理想的ではありません。

私はまた、あなたがbefore & afterEach機能を提供mochaのようなものを使用していると仮定しています。


var sandbox = sinon.createSandbox(); 

before(function() { 
    var person = { 
    myId:() => console.log('myId no op'), 
    }; 

    code.person = person; 
} 

it('Basic stub test', function() { 
    sandbox.stub(code.person, 'myId').returns('1234'); 
    assert(code.test(), '1234'); 
}); 

afterEach(function() { 
    sandbox.restore(); 
}); 

ドキュメントのリンク:http://sinonjs.org/releases/v4.1.3/sandbox/

(​​の使用は厳しく、ここで必須ではありませんが)

関連する問題