2016-01-22 17 views
5

मैं एक उदाहरण यहां पाया संशोधित कर रहा हूँ के साथ बदल प्रोप:परीक्षण प्रतिक्रिया घटक एंजाइम

https://github.com/airbnb/enzyme/blob/master/docs/api/ReactWrapper/setProps.md

class Foo extends React.Component { 
    render() { 
     return (
      <input className={this.props.name} type="text" value={this.props.name} onChange={()=>{}} /> 
     ); 
    } 
} 

it('should pass and does not',()=> { 
    const wrapper = mount(<Foo name="foo" />); 
    expect(wrapper.find('.foo').html()).toBe(`<input class="foo" type="text" value="foo">`); 
    wrapper.setProps({ name: 'bar' }); 
    expect(wrapper.find('.bar').html()).toBe(`<input class="bar" type="text" value="bar">`); 
}); 

Result: Expected '<input class="bar" type="text" value="foo">' to be '<input class="bar" type="text" value="bar">'. 

आप परीक्षण है कि className विशेषता सही ढंग से प्रोप परिवर्तन पर अद्यतन किया गया था का परिणाम से देख सकते हैं। लेकिन इनपुट का मान गलत तरीके से 'foo' पर सेट रहता है।

किसी भी विचार पर मैं उस मूल्य पर जोर दे सकता हूं कि इनपुट पर मूल्य गुण के लिए नए प्रोप प्राप्त करने वाले घटक पर सही ढंग से बदला गया है?

उत्तर

7

आपको एक रैपर पर .update() विधि को कॉल करना होगा। (बस नए प्रोप सेट करने के बाद) यह घटक को अद्यतन करने के लिए मजबूर करेगा और इनपुट के मान को बदलना चाहिए।

आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: http://airbnb.io/enzyme/docs/api/ShallowWrapper/update.html

+0

बस एक ध्यान दें, ओपी माउंट, उथले नहीं उपयोग कर रहा है, तो सही डॉक्स होना चाहिए http://airbnb.io/enzyme/docs/api/ReactWrapper /update.html; एक और नोट यह है कि माउंट के लिए सेटप्रॉप एक दूसरा, कॉलबैक, तर्क लेता है जो ऑपरेशन पूरा होने के बाद निष्पादित होता है: 'सेटप्रॉप (कुछप्रॉप, कॉलबैक) '(रेफरी: http://airbnb.io/enzyme/docs/api/ReactWrapper/ setProps.html) – nbkhope

संबंधित मुद्दे