gpt4 book ai didi

reactjs - 使用 [event.target.name] 时 React jest 测试停止工作

转载 作者:行者123 更新时间:2023-12-04 14:04:59 24 4
gpt4 key购买 nike

有以下组成

constructor(props) {
super(props);
this.state = {
comment: ''
}
}

handleChange = event => {
this.setState({ [event.target.name]: event.target.value })
}

render() {
return (
<form onSubmit={this.handleSubmit}>
<h4>Add a Comment</h4>
<textarea name="comment" onChange={this.handleChange} value={this.state.comment} />
<div>
<button>Submit Comment</button>
</div>
</form>
)
}

不会让我在写下面的时候通过测试

it('has a text area where the users can type in', () => {
wrapped.find('textarea').simulate('change', {
target: {value: 'new comment'}
})
wrapped.update()
expect(wrapped.find('textarea').prop('value')).toEqual('new comment')

})

但是当使用下面的 handlechange 时同样的测试通过了

 handleChange = event => {
this.setState({ comment: event.target.value })
}

如何在使用 [event.target.name] 时通过此测试

最佳答案

您还需要在 event.target 对象中拥有 name 属性

const event = {target: {name: "somename", value: "somevalue"}};

试试下面的,

it("should respond to name change", _ => {
const event = {target: {name: "somename", value: "somevalue"}};
const wrapper = mount(
<Component />
);
const handleChangeSpy = jest.spy(wrapper.instance(), "handleChange");
wrapper.update();
wrapper.ref('somename').simulate('change', event);
expect(handleChangeSpy.calledOnce).to.equal(true);
});

或者如果 Shallow 呈现,

 it("should respond to name change", _ => {
const event = {target: {name: "comment", value: "somevalue"}};
const wrapper = shallow(<Component />);
const myTextArea = wrapper.find(#comment);
myTextArea.simulate('change', event);
expect(...);
});

关于reactjs - 使用 [event.target.name] 时 React jest 测试停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68876412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com