2016-09-26 19 views
1

私はSinonEnzymeをテスト用に使用しています。私はオブジェクトの配列を取り、それを新しい別の配列に変換する関数を持っています。Sinon:テスト関数戻り値

getContainersByHostId(data) { 
    return _.chain(data) 
     .groupBy('hostId') 
     .toPairs() 
     .map(currentItem => _.zipObject(['hostId', 'containers'], currentItem)) 
     .value(); 
    } 

のArgs:

const containers = [{ 
      id: 'c_01', 
      hostId: 'h_01', 
      hostIp: '192.168.1.0', 
      name: 'Some Container' 
     }]; 

結果:

[{hostId: 'h_01', 
containers: [{ 
hostId: 'h_01', 
ip: '192.168.1.0', 
id: 'c_01', 
name: 'Some Container' 
}]}]; 

これが正常に動作します。しかし、私が直面している問題はユニットテストです。だから私はこれを持っています。

const containers = [{ 
      id: 'c_01', 
      hostId: 'h_01', 
      hostIp: '192.168.1.0', 
      name: 'Indigo Container' 
     }]; 

     const wrapper = shallow(<Groups {...props} />); 
     const instance = wrapper.instance(); 
     sandbox.stub(instance, 'getContainersByHostId'); 
     instance.getContainersByHostId(containers); 
     expect(instance.getContainersByHostId.calledWith(containers)).to.equal(true); 
     }); 

argsが新しい配列と等しいかどうかをテストするにはどうすればよいですか?

更新:

私はreturnValueを試してみましたが、それは偽の私を与え、私はそれが本当に戻って何をチェックするためにすべての可能な解決策を見つけることができませんでした。

+0

正確に何をアサーションしますか?私は2つの配列、1つは入力、2つ目は期待される出力を持つべきだと思います。だからあなたは、その入力を使って 'getContainersByHostId'を呼び出すと、期待される出力を返さなければならないと主張します。これは達成したいことですか? –

+0

それは私が主張したいことです。しかし、出力配列に対してそれを宣言すると、私には未定義が与えられます。私はそれをどのように実現できるかの例を書くことができますか?たぶん私は何か間違ったことをしています。私も私の質問を編集します – Umair

+0

@LazarevAlexandr – Umair

答えて

2

まず、関数をスタブしているときはすべての動作を取り消すので、このスタブの値を指定しない場合は、undefinedが返されます。おそらくあなたはsinon.spy()と混同しています。

私があなたを正しく理解していれば、必要なのはさらに簡単に達成できます。必要はありません。Sinon次のようなもの:

const modified = instance.getContainersByHostId(inputArray);  
expect(modified).to.eql(expectedArray); 
+0

私は本当にここで何かをやっていることを知っていた。あなたが正しいです。しかし、私はあなたの最初のポイントを得るかどうかはわかりません。私が返り値を指定しなければならないと言ったポイントは?あなたはそれを詳しく教えてもらえますか?私は基本的になぜ最初に「未定義」を投げているのかを理解したいと思っています。 – Umair

+0

あなたが言ったように、私はスパイやクラスメソッドのスタブを作る必要はないと言っていますか?以来、あなたは直接元の機能を主張しましたか?私は印象を受けていましたが、スパイやスタブでこれを行うべきですか?これについて私に深く説明できるなら、本当に感謝します。 – Umair

+0

テストケースに手動関数呼び出しがあります: 'instance.getContainersByHostId(containers);'あなたは何かをスパイするかスタブする必要はありません。関数呼び出しを制御しないときは、スタブまたはスパイが使用されます。ほとんどの場合、何かを呼び出すときに使用されます。これは、スパイド・メソッドをトリガーします。 _specifyの戻り値_については、私は 'stub.returns(obj);を言及していました。このメソッドは、スタブが指定された値を返すようにします。あなたはシノンのAPIをここで詳しく見ることができます:http://sinonjs.org/docs/ –