2016-09-02 4 views
1

Ich versuche, einen Test für redux saga wie folgt zu implementieren, aber ich lief auf ein Problem. Der Fehler, den ich erhalte, ist, kann nicht lesen Eigenschaft Nutzlast von undefined. Die 'Nachricht' var, die ich an die Saga-Funktion übergeben habe, ist aus irgendeinem Grund undefiniert, kann mir jemand sagen warum? DankTesten 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), 
     ...... 
     ] 

Wenn ich angemeldet Nachricht trösten unten I 'undefined' get

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

Ich verwende actionCreator von redux-Aktionen:

export const addMessage = createAction(ADD_MESSAGE); 
+0

Sie haben die Argumente auf der takeEvery passieren ... wenn nicht, die wirksam verwenden, um die erste Aktion in onCreateMessage yeild, und Sie können den Wert auf Nachricht über eine Aktion zu bekommen. – andresmijares25

Antwort

3

Änderung

const gen = onCreateMesaage()

zu

const gen = onCreateMessage(message)

Erläuterung:

message ist die Funktion übergebenen Argumente zum Generator anstatt das yield Ergebnis. Der vorherige Code funktioniert für das Ergebnis. z

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