2016-06-21 18 views
2

は私が酵素+ Sinonをuszing反応するコンポーネントをクリックをテストしようとしている反応sinonスタブは、コンポーネント

var stub = sinon.stub(Comp.prototype, 'save', function() { }); 

let wrapper = shallow(
    <Comp/> 
); 

wrapper.find('.btn-header').simulate('click'); 
sinon.assert.called(stub); 

Comp.prototype.refineOnClick.restore(); 

マイコンプコンポーネント例外をスローセーブ機能を持ってい

save: function() { 
    throw('error'); 
} 

私がテストを実行すると、エラーはスローされず、スタブ内の空の関数が起動されることは期待されませんが、そうではありません。コンポーネント内の実際の関数は起動され、空のスタブは起動されません。

+1

残念ですが、あなたのスタブまたはあなたの正規の関数を呼び出すのではなく、あなたのスタブではなく通常の関数を呼び出すことですか? –

+0

テストがあなたのスタブを決して呼び出さない、あるいは実際の 'save'関数を呼び出さないということを意味しているのかどうかは分かりますか?のように、それはエラーをスローしますが、スタブを呼び出していませんか? – ZekeDroid

+0

@BenHareそれは、スタブではなく正規の関数を呼び出しています。 – NiRR

答えて

0

ユニットテストの原則の1つは、テスト中のユニットの内部構造を偽造するべきではないということです。テストの読みやすさとメンテナンス性が低下します。方法saveは明らかにCompの内部にあるので、偽造しないでください。

あなたがそのコンポーネントにパラメータとして渡すかどうそれはOKのようになります。

var stub = sinon.stub(); 

let wrapper = shallow(
    <Comp onSave={stub} /> 
); 

wrapper.find('.btn-header').simulate('click'); 
sinon.assert.called(stub); 
+0

@NiRR、元の質問に添付された私のコメントに続き、luboskrnacの例では 'save'メソッドは' this.props.onSave'を呼び出さなければなりません。 –

1

あなたはそれは、インスタンスの使用して、酵素ラッパーに(したがって、スタブと)の機能にアクセスすることができます。だからあなたのコンポーネントの保存機能をテストするには、次の操作を行います。

const wrapper = shallow(<Comp />) 
sinon.stub(wrapper.instance(), 'save') 
wrapper.find('.btn-header').simulate('click') 
expect(wrapper.instance().save).to.have.been.called 

注、私はためsinon-チャイ構文を.to.have.been.called使用しています。

関連する問題