2017-02-04 66 views
0

我在使用Sinon和綁定方法時遇到了一些困難(https://babeljs.io/docs/plugins/transform-class-properties/)。如何在綁定的React組件方法上使用sinon?

我該如何附加間諜?這裏有一個要點: https://gist.github.com/stevens32/b5eee5cc1781a687be03bf80ce8425e0

導致:

bound method spying 
    √ should be an instance of FormComponent 
    should spy on boundChangeInput 
    √ should have calledOnce prop on boundChangeInput from spy 
    1) should have boundChangeInput.calledOnce true on simulated input change 
    √ has the correct value 
    should spy on notBoundChangeInput 
    √ should have calledOnce prop on notBoundChangeInput from spy 
    √ should have notBoundChangeInput.calledOnce true on simulated input change 
    √ has the correct value 

6 passing (133ms) 
    1 failing 

    1) bound method spying should spy on boundChangeInput should have boundChangeInput.calledOnce true on 
mulated input change: 

    AssertionError: expected false to equal true 
    + expected - actual 

    -false 
    +true 
+1

我還沒有找到一種方法,並選擇了綁定在組件的構造函數 –

+0

誰知道爲什麼有人會downvote呢? – stevens32

回答

2

您可能需要首先創建組件的一個實例。試試這個:

describe('should have boundChangeInput.calledOnce true on simulated input change', function() { 

    const node = mount(<FormComponent />) 
    const component = wrapper.instance() 

    let boundChangeSpy = sinon.spy(node, 'boundChangeInput') 

    component.forceUpdate() 
    wrapper.update() 

    wrapper.find('input').at(0).simulate('change',{target:{value:'some value'}}) 

    expect(node.boundChangeSpy.calledOnce).to.equal(true) 
}) 

來源:Test custom method on React component has been called, using Enzyme and Sinon

+0

謝謝!我嘗試使用wrapper.instance(),但也沒有工作 - 看起來像reactInstance.forceUpdate()和wrapper.update()做的伎倆。 – stevens32

相關問題