0

我正在尝试测试我的 signupAction 如下所示。

import axios from 'axios';
import actionTypes from '../action_types';
import { apiRequest } from '../common_dispatch';

export const signupAction = (user) => async (dispatch) => {
  dispatch(apiRequest(true));
  await axios
    .post(`${process.env.REACT_APP_API_URL}/users`, { ...user }, {
      headers: { 'Content-Type': 'application/json' },
    })
    .then((response) => {
      dispatch(
        {
          type: actionTypes.REGISTER_SUCCESS,
          payload: response.data.user,
        },
      );
      dispatch(apiRequest(false));
    })
    .catch((error) => {
      let errors = 'ERROR';
      if (error.message === 'Network Error') {
        errors = error.message;
      } else {
        errors = error.response.data.errors;
        console.log(error);
      }
      dispatch(
        {
          type: actionTypes.REGISTER_FAIL,
          payload: errors,
        },
      );
      dispatch(apiRequest(false));
    });
};

我想我可以使用 fetchMock 库来模拟上面的 API 调用。问题是 fetchMock 进行实际调用,因此测试在第一个实例中通过,但是当我第二次运行它时失败,因为我尝试注册的用户已经存在。我的测试如下图所示。

mport configureMockStore from 'redux-mock-store';
import * as actions from './signup.action';
import mocks from './mocks';
import thunk from 'redux-thunk';
import fetchMock from 'fetch-mock';

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

describe('signUp actions', () => {
    afterEach(() => {
        fetchMock.resetMocks();
        console.log('yess bro am called')
    })

    it('dispatches create REGISTER_FAIL when signup has been done', async () => {
        fetchMock.postOnce('/users', { ...mocks.user }, {
            headers: { 'Content-Type': 'application/json' },
        });
        const expectedActions = [
            { type: 'API_REQUEST', payload: true },
            { type: 'REGISTER_FAIL', payload: { email: "Email karanilarrygmail.com is not a valid email" } },
            { type: 'API_REQUEST', payload: false },
        ]
        const store = mockStore(mocks.user);
        return store.dispatch(actions.signupAction(mocks.user)).then(() => {
            expect(store.getActions()).toEqual(expectedActions)
        })
    });


mocks.user 是一个包含用户注册数据的对象。

我究竟做错了什么

4

0 回答 0