2017-09-11 16 views
0

私が反応成分の中で、以下の機能を持っている:テスト値 - sinon /チャイ

parentFunction: function(items){ 
    let variableOfInterest = this.callThisFunction().toArray().filter((ele) => { 
    if(obj[ele.get('id')]){ 
     return ele 
    } 
    }).map((ele) => ele.get('id')) 

    this.setState({newState:variableOfInterest}) 
} 

私はスタブを使用してcallThisFunctionの呼び出しのためのテストを書くことができるんだけど、 variableOfInterestの値を偵察するためにsinonまたはchaiを使用することが可能かどうかを判断することができませんでした。私は引数を渡すことができるテストを作成し、結果の値をテストするために 'expect'を使用したいと思います。最後に値を返すのは実際には意味がありません。そうすることで、テストのためだけに不要なように思えます。 また、toArray()を呼び出した結果をテストし、可能であればfilter()をテストすることもできます。どんな洞察もありがとう!

it('should call callThisFunction() once',() => { 
    let callThisFunctionStub = sinon.stub(prototype, 'callThisFunction') 
    let stub = callThisFunctionStub.callsFake(() => objectToReturn) 
    prototype.callParentFunction(items) 
    sinon.assert.calledOnce(stub) 
}) 
+0

'variableOfInterest'の背後にあるコードが副作用を持っていない限り、それはデッドコードであり、単に削除することができます。この変数は、コードのどこでも使用されません。 – marvinhagemeister

+1

@marvinhagemeister状態の設定に使用します。 –

+0

あなたは正しいです、私はそれを逃した!混乱して申し訳ありません – marvinhagemeister

答えて

1

私は、引数に渡すことができますテストを書くのが好き、と を使用したいためにテストするために「期待する」:

これはcallThisFunction()の呼び出しのための私のテストです結果の値

オプション1:

あなたは単にnewStateの更新された値を取得するために状態を使用して、あなたの期待値と比較することができます。

これは、airbnb/enzymeライブラリを使用してReactコンポーネントをテストすることによって、非常に簡単に実行できます。酵素もmochachaiを使用するので、構文はほぼ同じです。また、スパイとモックのAPIを提供しています(この場合はおそらく必要ありませんが)。ここで

浅いレンダリングを経て.state()を取得するためのAPIの例です。

const wrapper = shallow(<MyComponent />); 
expect(wrapper.state().foo).to.equal(10); 
expect(wrapper.state('foo')).to.equal(10); 

ですから、parentFunctionを持っているコンポーネントのテストを書くことコンポーネントの浅いマウントを行い、シミュレートする必要がありますparentFunctionを呼び出し、stateを取得し、その値を確認してください。

オプション2:

あなたが状態を確認したい、またはvariableOfInterestを計算するためのより複雑なテストを書きたくない場合は、別の関数に計算コードを移動してみたり、 の書き込みテストはです。

+0

オプション1をどのように実装するかを詳しく説明できますか? –

+0

答えを詳細で更新しました。 – ryder

関連する問題