我相當新的酶。我有兩個組件正在測試中。酵素:如何測試onSubmit函數作爲道具傳遞?
form.jsx
const LoginForm = ({ style, handleSubmit }) => {
return (
<form onSubmit={handleSubmit}>
<Button type='submit'>
Login
</Button>
</form>
);
};
LoginForm.propTypes = {
handleSubmit: PropTypes.func.isRequired
};
我在另一個組件,如下所示使用該組件:
Component.jsx
export default class Login extends Component {
constructor(props) {
super(props);
this.onLogin = this.onLogin.bind(this);
}
onLogin(event) {
event.preventDefault();
this.props.loginUser();
}
render() {
return (
<LoginForm style={loginFormStyles} handleSubmit={this.onLogin} />
);
}
}
Login.propTypes = {
auth: PropTypes.object.isRequired, //mapStateToProps
loginUser: PropTypes.func.isRequired //mapDispatchToProps
};
我已經寫了試驗form
和他們正在通過。
形狀test.js
it('should have a onSubmit handler',() => {
const props = {
handleSubmit:() => {}
};
const wrapper = shallow(<LoginForm {...props} />);
expect(_.isFunction(wrapper.props().onSubmit)).to.be.true;
});
it('should should call handlesubmit on form submission',() => {
const handleSubmit = sinon.spy();
const wrapper = shallow(<LoginForm handleSubmit={handleSubmit} />);
wrapper.simulate('submit');
expect(handleSubmit).to.have.been.called;
});
這些測試都通過。令人困惑的部分是:
1-我如何測試onLogin
函數Component.jsx
來自form.jsx
?
2-反之亦然,如果我必須從component.jsx
觸發onSubmit
的我該怎麼做?
如果您使用的是'redux',那麼我會建議測試您的操作(在這種情況下是登錄操作)。測試點擊事件並檢查'redux'是否正常工作(即調用動作,調度成功或失敗)沒有什麼大的好處 – anoop
是的,我正在使用REDX。但考慮到這種情況是否有任何方法來測試父級複合組件? – Umair