我使用fetch-mock,redux-mock-store,promise中间件来测试我的应用程序的redux实现。我有以下代码:
import configureMockStore from 'redux-mock-store';
import promiseMiddleware from 'redux-promise-middleware';
import fetchMock from 'fetch-mock';
import thunk from 'redux-thunk';
import createLogger from 'redux-logger';
import { bindActionCreators } from 'redux';
import { ACTION_1, hostNameSearchActions }
from '../../../src/actions/hostNameSearchActions';
const middlewares = [thunk, promiseMiddleware(), createLogger()];
let mockStore = configureMockStore(middlewares);
const SERVICE_URL = 'http://url_to_the_service';
describe('Testing thunk actions', () => {
let store = mockStore({ hostData: { key1 :'value'} });
const aHostNameSearch = bindActionCreators({ ...hostNameSearchActions }, store.dispatch).hostNameSearch;
afterEach(() => {
fetchMock.reset();
fetchMock.restore();
mockStore = configureMockStore(middlewares);
store = mockStore({ hostData: { key1 :'value'} });
});
it('ACTION_1_PENDING, ACTION_1_REJECTED dispatched, payload matches expected payload', (done) => {
fetchMock
.mock(`${SERVICE_URL}`,
404 );
const expectedActions = [
{ type: `${ACTION_1}_PENDING` },
{ type: `${ACTION_1}_REJECTED`, payload: {error: 'test.body.error.message'}}
];
aHostNameSearch().then(() => {
expect(store.getActions()).toEqual(expectedActions);
done();
});
});
});问题是,我用retchMock模拟的404调用最终总是被解析为ACTION_1_FULFILLED。为什么会是这样呢?我是否错误地模拟了呼叫?
发布于 2018-04-30 20:14:25
Redux Promise Middleware总是在给出拒绝的操作时调度拒绝的操作。如果您的模拟操作最终总是一个已实现的操作,那么当您期望一个被拒绝的操作时,这是因为promise有效负载已经实现。
如果您有任何副作用(例如,任何使用promise上的then方法的函数),并且没有正确地将错误传递到中间件,就会发生这种情况。然而,如果没有更多的上下文,就不可能给你一个明确的答案。如果你包含了你的hostNameSearchActions,那将会很有帮助。
https://stackoverflow.com/questions/48305242
复制相似问题