2016-01-22 24 views
5
burada bulduğu bir örnek modifiye ediyorum

ile değiştirmek prop test React: Sen className nitelik doğru pervane değişikliği güncellendi bu testin sonucuna görebileceğinizbileşen enzim

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">'. 

. Ancak girişin değeri yanlış olarak 'foo' olarak ayarlanmış kalır.

Bir girdideki değer özniteliğine yeni sahne alan bileşende bu değerin doğru bir şekilde nasıl değiştirildiğine dair herhangi bir fikir var mı?

cevap

7

Sarmalayıcıda .update() yöntemini çağırmanız gerekir. (Yeni sahne belirledikten hemen sonra) Bu, bileşenin güncellenmesini zorlar ve girdinin değeri değişmelidir.

Burada bu konuda daha fazla bilgi edinebilirsiniz: http://airbnb.io/enzyme/docs/api/ShallowWrapper/update.html

+0

Sadece bir not, OP sığ değil montaj kullanıyor, bu yüzden doğru belgeler olmalıdır http://airbnb.io/enzyme/docs/api/ReactWrapper /update.html; Başka bir not, mount için setProp işlem tamamlandıktan sonra yürüten ikinci bir geri arama, argüman alır: 'setProps (someProps, callback)' (ref: http://airbnb.io/enzyme/docs/api/ReactWrapper/ setProps.html) – nbkhope