2016-09-02 11 views
1

私はredux sagaのテストを次のように実装しようとしていますが、問題が発生しました。私が得るエラーは、未定義のプロパティペイロードを読み取ることができません。なぜ私はサガ関数に渡された 'メッセージ' 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)) 
} 
関連する問題