【发布时间】:2019-06-07 08:53:20
【问题描述】:
我在父组件中有一个名为onFormSubmit 的函数。我将此函数传递给子组件。在子组件中提交表单时,将调用子组件内的onFormSubmit 函数将值传递回父组件。然后这个onFormSubmit 函数会进行某种检查,并在此基础上更新父组件中的状态。
我想模拟/存根这个 ajax/api 调用。我怎样才能做到这一点?或者我如何编写我的代码以使这个场景是可测试的。
我的父组件如下所示:
class App extends React.Component {
state: { message: "" }; //I want to test the state of message
onFormSubmit = async (form) => {
if (form.primaryEmail !== "") {
const response = await axios.post("api/", form);
this.setState(
{
message: (response.status === 200) ? "Your email has been updated." : ""
});
} else {
this.setState({ message: "No Update" });
}
}
render() {
return (
<div>
<Child onSubmit={this.onFormSubmit} />
<h4>{this.state.message}</h4>
</div>
);
}
}
我的子组件如下所示:
class Child extends React.Component {
state = {
primaryEmail: "",
};
onPrimaryEmailChange = e => {
this.setState({ primaryEmail: e.target.value });
}
onFormSubmit = e => {
e.preventDefault();
this.props.onSubmit(this.state); //passing the value back to parent component
}
render() {
return (
<form onSubmit={this.onFormSubmit}>
<h3>Email Address</h3>
<div>
<input type="email" value={this.state.primaryEmail} onChange={this.onPrimaryEmailChange} />
</div>
<div>
<button type="submit">Submit</button>
</div>
</form >
);
}
}
我的测试如下所示:
test("When valid form is submitted, it should show a success message", () => {
const wrapper = mount(<App />);
wrapper.find("input").at(0).simulate("change", {
target: {
value: "a@b.c",
}
});
wrapper.find('form').simulate('submit');
expect(wrapper.state('message')).toEqual('Your email has been updated.');
});
我收到此错误:
期望值等于:
“您的电子邮件已更新。”
收到:
""
【问题讨论】: