reactjs - 使用 Jest、redux-mock-store 和 Moxios 测试异步调用

标签 reactjs redux jestjs

我创建了一个简单的案例来测试我的操作,但我的 store.dispatch 没有返回 promise 。有人可以告诉我出了什么问题吗?

Action.js 代码:

export const handleSubmit = inputData =>
(dispatch) => {
axios.post(`${API_URL}/process-input/`, { input: inputData })
  .then((resp) => {
    dispatch({
      type: 'UPDATE_OUTPUT',
      payload: resp.data,
    });
  })
  .catch((e) => {
    dispatch({
      type: 'UPDATE_OUTPUT',
      payload: e.message,
    });
  });

};

我的测试:

import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import moxios from 'moxios';
import * as actions from './../../../../src/modules/inputData/action';
import { API_URL } from './../../../../src/constants';

const middlewares = [thunk];
const mockStore = configureMockStore(middlewares);

describe('InputData actions', () => {
 test('Test input value update', () => {
 moxios.install();
 moxios.stubRequest(`${API_URL}/process-input/`, { status: 200, response: 'A nice test result' });
 const store = mockStore();

 return store.dispatch(actions.handleSubmit('anyData'))
  .then(() => {
    expect(store.getActions()).toEqual([
      { type: 'UPDATE_OUTPUTT', payload: 'A nice test result' },
    ]);
  });

}); });

返回的错误是:无法读取未定义的属性“then”

最佳答案

您的 redux 操作没有返回 promise 。您应该返回 axios.post 函数。

export const handleSubmit = inputData =>
(dispatch) => {
return axios.post(`${API_URL}/process-input/`, { input: inputData })
  .then((resp) => {
    dispatch({
      type: 'UPDATE_OUTPUT',
      payload: resp.data,
    });
  })
  .catch((e) => {
    dispatch({
      type: 'UPDATE_OUTPUT',
      payload: e.message,
    });
  });
};

关于reactjs - 使用 Jest、redux-mock-store 和 Moxios 测试异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45741093/

相关文章:

reactjs - React Action Creator 和 Action 类型命名约定?

reactjs - 如何从 React 组件 Redux Toolkit 中的 createAsyncThunk 获取结果

vue.js - 如何用 jest 测试 nuxt?

reactjs - 如何在 React 功能组件中模拟 ipcRenderer.on 功能

javascript - Jest 测试文件中的模拟文档

javascript - 如何将 Django API 项目与 Nodejs 集成并在前端使用react?

javascript - 如何从后端获取数据

javascript - 为什么我的路线没有加载我的 React 组件?

javascript - 我可以在 Web 应用程序的客户端使用 .env 文件吗?

javascript - 如何在react-redux中正确更新我的initialState