【发布时间】:2019-02-28 10:07:19
【问题描述】:
我有一个使用来自redux-api-middleware 的 RSAA 的操作,称为 createUser:
export const createUser = values => {
const email = values.get("user_attributes[email]");
const password = values.get("user_attributes[password]");
return dispatch => {
dispatch({
[RSAA]: {
endpoint: `${globalVar.API_URL}/users/`,
method: "POST",
body: values,
types: [
CREATE_USER,
{
type: CREATE_USER_SUCCESS,
payload: (action, state, response) => {
return response.json().then(json => {
dispatch(login(email, password));
dispatch(sendFlashMessage("success", json.message));
return json;
});
}
},
CREATE_USER_FAILURE
]
}
});
};
};
...我有一个带有redux-form 的组件使用此操作:
class UserNew extends Component {
constructor(props) {
super(props);
this.onSubmit = this.onSubmit.bind(this);
}
onSubmit(values) {
values = { user_attributes: values };
const data = objectToFormData(values);
this.props.actions.createUser(data);
}
render() {
const { handleSubmit, errors } = this.props;
return (
<UserForm
handleSubmit={handleSubmit}
onSubmit={this.onSubmit}
errors={errors}
/>
);
}
}
在我的jest 和enzyme 测试文件中:
it("create new user", done => {
wrapper
.find("#sign-up")
.hostNodes()
.simulate("click");
wrapper
.find('[name="first_name"]')
.hostNodes()
.simulate("change", { target: { value: "User" } });
...
...填写表格后:
wrapper
.find("form")
.hostNodes()
.simulate("submit");
done();
所以,我想拦截 API 调用并让它完成执行操作(发送登录和 sendFlashMessage)。
我试过moxios,但没用:
moxios.install();
moxios.stubRequest(`${globalVar.API_URL}/users/`, {
status: 200,
response: [{user: {...}, message: "OK"}]
});
我正在尝试使用sinon 来解决这个问题
【问题讨论】:
-
发布你的sinon代码
-
什么是RSAA?谷歌什么也没告诉我
-
我认为RSAA和CALL_API是一样的:
import { CALL_API, RSAA } from 'redux-api-middleware'; -
嘿,你的问题得到回答了吗?
标签: reactjs jestjs sinon enzyme jsdom