【发布时间】:2018-08-23 22:56:51
【问题描述】:
在使用 React 和 redux 进行编码以及使用 JEST、酶和 sinon 进行测试时,我非常熟悉,所以请耐心等待。
我正在尝试在我的应用程序中测试 saga。目前我正在尝试测试我的“serverSaga”,它负责调用 REST-API 并将状态设置为响应的内容(在本例中为食物菜单)。
当我尝试运行测试时,它失败并出现错误:
runSaga must be called on an iterator
20 | describe('Menu View Saga', () => {
21 | it('can retrieve todays menu', async () => {
> 22 | await runSaga(
23 | {
24 | dispatch: action => dispatched.push(action),
25 | getState: () => ({})
我猜这与它无法从 serverSaga 迭代 handleRequest() 中的 yield 有关,但我有点不知道为什么会这样,以及我做错了什么。
测试:
import sinon from "sinon";
import * as obj from "../../services/serverService";
import { handleRequest } from '../../sagas/serverSaga'
import { runSaga } from "redux-saga";
import { menuList } from '../../stubs/menuList'
import { setMenu } from '../../reducers/menuReducer'
const serverStub = sinon.stub(obj, 'callServerApi')
serverStub.callsFake(() => {
return {
...menuList.menu
}
})
const saga = handleRequest
const dispatched = {}
describe('Menu View Saga', () => {
it('can retrieve todays menu', async () => {
await runSaga(
{
dispatch: action => dispatched.push(action),
getState: () => ({})
},
saga,
'test-url',
'GET'
).done
expect(serverStub.calledOnce).toBeTruthy()
expect(dispatched).toContainEqual(setMenu(menuList))
})
})
服务器传奇
import React, { Component } from 'react'
import { put, call, take, fork, select } from 'redux-saga/effects'
import { callServerApi } from '../services/serverService'
export function* handleRequest(url, method, data){
//TODO - ERROR HANDLING
return yield executeRequest(url, method, data)
}
function* executeRequest(url, method, data) {
try {
let response = yield call(callServerApi, url, method, data)
let responseSuccess = response && response.Succeeded
//temporary workaround - should NOT return response here,
return response
if (responseSuccess) {
yield success(response)
//return response
} else {
console.log('ERROR', response)
//TODO - ERROR HANDLING
} } catch (error){
console.log('Error from serverSaga', error)
//TODO - ERROR HANDLING
}
}
【问题讨论】:
标签: reactjs react-redux jestjs sinon enzyme