"Действия должны быть простыми объектами" ... но это

Извините, очень распространенная ошибка, но в тесте ниже не понимаю, как оскорбительное действие storeMgrAnnouncement(result) не простой объект. Вызов api и thunk action являются насмешливыми, а оскорбительные действия - нет.

home.test.js

/* not showing 3rd party imports */

import Home from '../../components/home';
import {getMgrAnnouncement} from "../../__mocks__/actions";
import {STORE_MGR_ANNOUNCEMENT} from "../../constants";
import {success} from "../../__fixtures__/announcementGet";

const mockStore = configureStore([thunk]);

describe('Home Page', () => {

    var store = null;
    const initialState = {};

    beforeEach(() => {
        store = mockStore(initialState);
        shallow(<Home store={store} />);
    });

    it ('should store manager announcement after retrieving it', async () => {
        await store.dispatch(getMgrAnnouncement());
        expect(store.getActions()).toContainEqual({
            type: STORE_MGR_ANNOUNCEMENT, 
            payload: success
        });
    });

__mocks__/ действия /index.js

import { storeMgrAnnouncement } from '../../actions';
import { success } from '../../__fixtures__/announcementGet';

/* mock api call */
function announcementGet() {
  return new Promise((resolve, reject) => {
    process.nextTick(() => {
      resolve(success)
    })
  })
}

/* mock thunk action */
export function getMgrAnnouncement() {
  return function(dispatch, getState) {
    return announcementGet()
    .then(result => {
      /*
         ERROR: Actions must be plain objects. Use custom middleware for async actions.
      */
      dispatch(storeMgrAnnouncement(result));
    })
  }
}

действия /index.js

import { STORE_MGR_ANNOUNCEMENT } from '../../constants';

export function storeMgrAnnouncement(result) {
  return {
    type: STORE_MGR_ANNOUNCEMENT,
    payload: result
  }
}

1 ответ

Вы отправляете результат getMgrAnnouncement()

store.dispatch(getMgrAnnouncement())

Но эта функция возвращает функцию:

function getMgrAnnouncement() {
  return function(dispatch, getState) {

Вы должны отправить объект, а не функцию.

Другие вопросы по тегам