2016-06-21 74 views
2

我試圖測試uszing酶+興農一個反應組件上的點擊興農存根在不更換功能反應成分

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

單元測試的原理之一是,你不應該假冒被測單元的內部。它只是使測試更不易讀和維護。方法save顯然是內部的Comp,因此不應該僞造。

這將是確定的,如果你把它作爲參數傳入該組件:

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 

注意,我使用興農釵.to.have.been.called語法。