如何解决如何在 reactjs + redux + redux thunk 上通过 Jest - Enzyme - Sinon 测试道具功能
我是单元测试的新手,我不知道我做得对还是不对,我找不到任何方法来实现这一点。
所以起初,我有一个类似于这里的动作 Axios testing with redux-thunk (moxios-jest-enzyme)
我不知道为什么,我的 thunk 道具从来没有被 Sinon.spy
触发过
这是我目前所拥有的:
// login.js
export class Login extends Component {
// ....
onSubmit = (event,errors,value) => {
if(errors <= 0){
this.setState({
email : value.email
});
let param = {
username : value.email,password : value.password
}
if (this.props.isSuccessCheckEmail){
this.props.postLogin(param)
} else {
// here im checking if the props will be anonymous function,but i got `Undefined`
console.log('checking',this.props.checkEmail())
this.props.checkEmail(param)
}
}
}
// ......
}
const mapStatetoProps = (state) => {
return {
isLoading : state.AuthReducer.isLoading,isSuccessCheckEmail: state.AuthReducer.isSuccessCheckEmail,email: state.AuthReducer.email
};
};
const mapdispatchToProps = (dispatch) => {
return {
checkEmail: (param) => dispatch(checkEmail(param)),};
};
export default compose(
connect(
mapStatetoProps,mapdispatchToProps
),withRouter
)(Login);
// action.js
// submit checking email
export function checkEmail(param) {
return (dispatch,getState) => {
dispatch(checkingEmail())
// this will call `axios` POST method
AUTH.checkEmail(param).then((response) => {
let data = response.data
if (data.Meta.code === 200) {
dispatch(checkingEmailSuccess(data.data))
} else {
dispatch(submitLoginFailed(data.Meta))
}
}).catch((err) => {
dispatch(submitLoginFailed(err?.response ? err?.response?.data : {message: 'Something went wrong'}))
})
}
}
// login.test.js
it("check when user fill the email,it will trigger checkEmail function",() => {
const resetLoginState = sinon.spy();
const resetCheckEmailState = sinon.spy();
const checkEmail = sinon.spy();
let props = {
resetLoginState,resetCheckEmailState,checkEmail
};
const wrapper = mount(<Login {...props}/>);
expect(resetLoginState.called).toBeTruthy();
expect(resetCheckEmailState.called).toBeTruthy();
expect(wrapper.find('AvForm')).toHaveLength(1);
wrapper.find('input').simulate('change',{ target: { value: 'test@test.com' } });
wrapper.find('AvForm').simulate('submit');
expect(checkEmail.called).toBeTruthy();
});
我的目标是在用户想要通过查看服务的电子邮件登录时测试 checkEmail 功能,如果可以,我很高兴看到如何使用 Sinon
检索通过模拟更改输入的电子邮件。>
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。