2016-05-18 7 views
0

、私は二つのことのためにテストを実装する方法を教えてください。 2)パラメータ 'num'が関数makeRing(num)に渡されるかどうかは、obj.newRing({番号:num})で渡されたオブジェクトのプロパティと一致します。ユニット(呼び出しネストされた機能を確認してください)

function makeRing (num) { 
currRing = obj.newRing ({number: num}); 
} 

多分、誰かがこのような状況でシロンを使う方法を知っていると思います。私は長い間苦しんでいる...すべての感謝!あなたのテストでobjへのアクセス権を持っている場合は、次の操作を行うことができます

答えて

0

// create a spy for your function: 
const newRingSpy = sinon.spy(); 

// replace the real function with the spy: 
sinon.stub(obj, 'newRing', newRingSpy); 

// run the test: 
makeRing(7); 

// 1) validate that obj.newRing was called exactly once: 
expect(newRingSpy.calledOnce).to.be(true); 

// 2) and/or validate the arguments it was called with: 
expect(newRingSpy.firstCall.args).to.eql([{number: 7}]); 

あなただけの機能が全く呼ばれたかどうかを知りたい場合は、これはすでに第2のチェックで覆われています(関数が呼び出されなかった場合、newRingSpy.firstCallはヌルです)。

あなたはobjへのアクセスを持っていない場合は、このようなものに本番コードを変更するための最良の戦略であるかもしれない:

function makeRing (num, obj) { 
    currRing = obj.newRing ({number: num}); 
} 

その後、簡単にあなたのテストでmakeRing()にスタブobjを渡すことができます。

+0

テストでobjにアクセスできない場合はどうなりますか?どのように解決するか? – ajayv

+0

@ajayv私は自分の答えを更新しました。これはあなたの質問に答えますか? – Nicole

関連する問題