我们如何模拟 Redux 异步操作的获取?
How do we mock fetch for Redux Async Actions?
在 Redux 的 Writing Tests 部分,如果 store.dispatch
字面上调用 actions.fetchTodos
,store.dispatch(actions.fetchTodos())
怎么不调用 fetch
方法?
it('creates FETCH_TODOS_SUCCESS when fetching todos has been done', (done) => {
nock('http://example.com/')
.get('/todos')
.reply(200, { todos: ['do something'] })
const expectedActions = [
{ type: types.FETCH_TODOS_REQUEST },
{ type: types.FETCH_TODOS_SUCCESS, body: { todos: ['do something'] } }
]
const store = mockStore({ todos: [] }, expectedActions, done)
store.dispatch(actions.fetchTodos())
})
它正在调用 fetch
方法,但是 nock
行:
nock('http://example.com/')
.get('/todos')
.reply(200, { todos: ['do something'] })
截断 HTTP 请求,以便 fetch
简单地 returns 正确的数据(实际上没有到达端点)。
另一种选择是将对 fetch
的调用提取到另一个模块中——比如说,api
——并在你的动作创建器中使用它。在测试中,您只需在 api
模块上模拟出适当的方法。
在 Redux 的 Writing Tests 部分,如果 store.dispatch
字面上调用 actions.fetchTodos
,store.dispatch(actions.fetchTodos())
怎么不调用 fetch
方法?
it('creates FETCH_TODOS_SUCCESS when fetching todos has been done', (done) => {
nock('http://example.com/')
.get('/todos')
.reply(200, { todos: ['do something'] })
const expectedActions = [
{ type: types.FETCH_TODOS_REQUEST },
{ type: types.FETCH_TODOS_SUCCESS, body: { todos: ['do something'] } }
]
const store = mockStore({ todos: [] }, expectedActions, done)
store.dispatch(actions.fetchTodos())
})
它正在调用 fetch
方法,但是 nock
行:
nock('http://example.com/')
.get('/todos')
.reply(200, { todos: ['do something'] })
截断 HTTP 请求,以便 fetch
简单地 returns 正确的数据(实际上没有到达端点)。
另一种选择是将对 fetch
的调用提取到另一个模块中——比如说,api
——并在你的动作创建器中使用它。在测试中,您只需在 api
模块上模拟出适当的方法。