0

我在教程中找到了这段代码

...
import configureMockStore from 'redux-mock-store';

const middleware = [thunk];
const mockStore = configureMockStore(middleware);
...

it('should create BEGIN_AJAX_CALL & LOAD_COURSES_SUCCESS', (done) => {

    const expectedActions = [
        {type: types.BEGIN_AJAX_CALL},
        {type: types.LOAD_COURSES_SUCCESS, body: {
            courses: [{id:'clean-code', title:'Clean Code'}]
        }}
    ];

    const store = mockStore({courses:[]}, expectedActions);

    store
        .dispatch(courseActions.loadCourses())
        .then(() => {
            const actions = store.getActions();
            expect(actions[0].type).toEqual(types.BEGIN_AJAX_CALL);
            expect(actions[1].type).toEqual(types.LOAD_COURSES_SUCCESS);
            done();
        });
});

整个一点expectedActions都没有意义。

文档说,如果有第二个参数store,它应该是一个函数;(没有解释说明该功能会做什么)。

起初我认为这是出于某种原因迫使一些行动进入商店,但很快console.log告诉我事实并非如此。

因为只会dispatch导致动作累积。

那么是文中的错误还是有什么值得进一步探索的智慧呢?

4

1 回答 1

0

此功能在版本 1 中已删除,但您可以在 pre 1文档中找到示例。

该参数expectedActions用于测试。您可以使用一系列操作创建一个模拟商店,然后分派第一个操作。此操作将导致其他其他操作通过 thunks/api 中间件/等转发(调度/下一个)... 测试将检查expectedActions数组中的所有操作是否已作用于存储:

import configureStore from 'redux-mock-store';

    const middlewares = []; // add your middlewares like `redux-thunk` 
    const mockStore = configureStore(middlewares);

    // Test in mocha 
    it('should dispatch action', (done) => {
      const getState = {}; // initial state of the store 
      const action = { type: 'ADD_TODO' };
      const expectedActions = [action];

      const store = mockStore(getState, expectedActions, done);
      store.dispatch(action);
    })
于 2016-12-07T05:55:33.717 回答