модульный тестовый сценарий реагирования jest TypeError: Невозможно прочитать свойство then для неопределенного - PullRequest
0 голосов
/ 11 февраля 2019

Я написал тестовые сценарии, используя реагирование, redux-mock-store и redux, но я продолжаю получать ошибки.Я проверил эту же ошибку на stackoverflow, но я не могу понять, в моем случае.

Невозможно прочитать свойство '.then' неопределенного при тестировании создателей асинхронных действий с избыточным и реагировать

вот мой файл index.js:

import { post } from '../../../service/index';
import { CREATE_JD_SUCCESS, CREATE_JD_FAILED, CREATE_JD_URL, REQUEST_INITIATED, REQUEST_SUCCESSED } from '../../../constants/AppConstants'

export function createJob(jd) {
  return (dispatch) => {
    dispatch({
      type: REQUEST_INITIATED
    });
    post(CREATE_JD_URL, jd)
      .then((response) => {
        if (response.status === 200) {
          dispatch({
            type: REQUEST_SUCCESSED,
          });
          dispatch({
            type: CREATE_JD_SUCCESS,
            data: response.payload,
          })
        }
        else {
          dispatch({
            type: REQUEST_SUCCESSED
          });
          dispatch({
            type: CREATE_JD_FAILED,
            data: response.status,
          });
        }
      })
  }
}

вот мой файл index.test.js

import * as actions from '../index';
import configureMockStore from 'redux-mock-store';
import moxios from 'moxios';
import thunk from 'redux-thunk';
import apiGatewayEndpoint from '../../../../config/index';
import { CREATE_JD_SUCCESS, CREATE_JD_URL } from '../../../../constants/AppConstants';

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

const newJd = {
  "companyId": "12345",
  "jobDescription": 'Hello there'
};

const responseData = "job created!";

describe('actions for creating new job', () => {

  beforeEach(function () {
    moxios.install();
  });

  afterEach(function () {
    moxios.uninstall();
  });

  it('action for create job', async (done) => {
    let url = CREATE_JD_URL;
    moxios.stubRequest(apiGatewayEndpoint.apiGatewayEndpoint + url, {
      status: 200,
      response: responseData
    });
    const expectedActions = [{ "type": "REQUEST_INITIATED" }, { "type": "REQUEST_SUCCESSED" }, { data: responseData, type: "CREATE_JD_SUCCESS" }];
    const store = mockStore({});
    await store.dispatch(actions.createJob(newJd))
      .then(() => {
        expect(store.getActions()).toEqual(expectedActions);
      });
    done();
  });
});

по указанной выше ссылке в ответ он сказал, что ошибкапроисходит из-за метода store.dispatch (), возвращающего undefined.bt, в моем случае мои другие тестовые действия выполняются нормально, это то же самое, что я написал выше, не знаю, почему получаю эту ошибку.

консольная ошибка при запускеnpm test:

● actions for creating new jd › action for create jd

    TypeError: Cannot read property 'then' of undefined

      38 |     const expectedActions = [{ "type": "REQUEST_INITIATED" }, { "type": "REQUEST_SUCCESSED" }, { data: responseData, type: "CREATE_JD_SUCCESS" }];
      39 |     const store = mockStore({});
    > 40 |     await store.dispatch(actions.createJob(newJd))
         |           ^
      41 |       .then(() => {
      42 |         expect(store.getActions()).toEqual(expectedActions);
      43 |       });

если кто-нибудь знает, пожалуйста, сообщите мне, что я делаю здесь не так. любая помощь будет оценена

1 Ответ

0 голосов
/ 11 февраля 2019

просто напишите return перед вызовом сообщения в вашем файле index.js.Например:

return post(CREATE_JD_URL, jd)
      .then((response) => {
   ...

это сработало для меня.

...