【问题标题】:React testing component prop change with enzyme用酶反应测试组件道具的变化
【发布时间】:2025-11-29 10:40:01
【问题描述】:

我正在修改此处找到的示例:

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 属性在 prop 更改时正确更新。但是输入的值仍然错误地设置为 'foo'。

关于如何断言在接收新道具的组件上的值已正确更改为输入值属性的任何想法?

【问题讨论】:

    标签: javascript reactjs jasmine reactjs-testutils enzyme


    【解决方案1】:

    您必须在包装器上调用方法.update()。 (就在你设置新道具之后)这将强制更新组件并且输入的值应该改变。

    您可以在此处阅读更多信息:http://airbnb.io/enzyme/docs/api/ShallowWrapper/update.html

    【讨论】:

    最近更新 更多