1

我正在尝试按如下方式对 redux saga 进行测试,但遇到了问题。我得到的错误是无法读取未定义的属性有效负载。由于某种原因,我传递给 saga 函数的“消息”变量未定义,谁能告诉我为什么?谢谢

  saga.spec.js
    import test from 'tape'
    import { put,take,call } from 'redux-saga/effects'
    import { onCreateMessage } from '../src/common/sagas/messages'
    import { addMessage,createMessage } from '../src/common/reducers/messages'


    test('createMessage', assert => {
        const gen = onCreateMessage()



        var message = {
            id: 1234,
            channelID: "AA",
            text: "text",
            user: "user"
          }

        assert.deepEqual(
            gen.next(message).value,
            put(addMessage(message)),
            'createMessage should dispatch addMessage action'
        )

    })

saga/index.js
export default function* rootSaga(){

    yield [ 

        takeEvery('CREATE_MESSAGE', onCreateMessage),
        ......
        ]

当我在下面控制台记录消息时,我得到“未定义”

export function* onCreateMessage(message) {
    console.log(message)
    yield put(addMessage(message.payload))

    try {
        yield call(fetch,'/api/newmessage',
            {
             method: 'post',
             headers: {
                'Content-Type': 'application/json'
                },
             body: JSON.stringify(message.payload)}
            )

    } catch (error){
        throw error
    }
}

我正在使用来自 redux-actions 的 actionCreator:

export const addMessage = createAction(ADD_MESSAGE);
4

1 回答 1

3

改变

const gen = onCreateMesaage()

const gen = onCreateMessage(message)

解释:

message是传递给生成器函数的参数而不是yield结果。以前的代码适用于产生的结果。例如

export function* onCreateMessage() {
    const message = yield 
    console.log(message)
    yield put(addMessage(message.payload))
}
于 2016-09-23T07:38:00.397 回答