2016-09-02 3 views
1

다음과 같이 redux saga에 대한 테스트를 구현하려고하는데 문제가 발생했습니다. 내가 얻은 오류는 정의되지 않은 속성 페이로드를 읽을 수 없습니다. 사가 함수에 전달 된 'message'var은 어떤 이유에서든 정의되지 않습니다. 아무도 그 이유를 말할 수 있습니까? redux-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), 
     ...... 
     ] 

내가 REDUX-행동에서 actionCreator 사용하고

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 
    } 
} 

'정의되지 않은'얻을 아래에 내가 로그인 메시지를 콘솔 감사

:

export const addMessage = createAction(ADD_MESSAGE); 
+0

당신이하지 않은 경우 onCreateMessage에 첫 번째 조치를 yeild하는 테이크 효과를 사용, ... takeEvery에 인수를 전달해야하고,이 작업을 통해 메시지의 값을 얻을 수 있습니다. – andresmijares25

답변

3

변화를

const gen = onCreateMesaage()

설명

const gen = onCreateMessage(message)

에 :

messageyield 결과보다는 기능을 발전기에 전달 된 인수입니다. 이전 코드는 결과를 나타냅니다. 예컨대

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