2016-09-09 9 views
0

私はredux-sagaでテストをしようとしています。テープでredux-sagaテスト

const gen = onCreateMessage() 

const message = "aa" 

gen.next(message).value 

/// SAGA FUNCTION

export function* onCreateMessage(message) { 

    yield put(addMessage(message.payload)) 

エラーメッセージを:私はいくつかの未知の理由でgenerator.next(データ).VALUEを行うと、以下のように、データがサガ機能に渡されていません。定義されていないペイロードを読み取ることができません。

const gen = onCreateMessage(/* the message */) 

あなたはその後、gen.next().valueを行うことによって、次の値を取得することができるだろうと:

答えて

1

問題は、発電機を初期化するときに渡す必要があるので、あなたのジェネレータ関数は、引数としてmessageを受け入れるということですあなたの主張を確認する

ここでは一例とJSビンです:http://jsbin.com/catisu/edit?js,console

const { put, take } = ReduxSaga.effects; 
 
const { expect } = chai; 
 

 
const createMessage = message => ({ 
 
    type: 'CREATE_MESSAGE', 
 
    payload: message, 
 
}); 
 

 
const addMessage = message => ({ 
 
    type: 'ADD_MESSAGE', 
 
    payload: message, 
 
}); 
 

 
function* onCreateMessage(message) { 
 
    yield put(addMessage(message.payload)); 
 
} 
 

 
// In your test 
 
const message = 'some message'; 
 

 
// Message is passed when the generator is initialized 
 
const gen = onCreateMessage(createMessage(message)) 
 
let next = gen.next(); 
 

 
// Using Chai here but with tape it'd be the same concept 
 
try { 
 
    expect(next.value).to.eql(
 
    put(addMessage(message)) 
 
); 
 
    
 
    console.log('It works!'); 
 
} catch(e) { 
 
    console.error('bummer'); 
 
}
<script src="https://npmcdn.com/[email protected]/dist/redux-saga.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script>
また

小さなことが、あなたのジェネレータは​​キーを持つオブジェクトなので、プレーンな文字列を期待しているように、それはまた見えます動作しません。

+0

ジェネレータの初期化時にメッセージを渡しても問題ありませんが、私は gen.next(message).valueというメッセージを渡すことができます。http://joelhooks.com/blog/2016/03/20/ (私はonCreateMessageがメッセージを待っているので、const gen = onCreateMessage(/ *メッセージ* /)の代わりにconst gen = onCreateMessage(createMessage(message))を使用する必要があります。ペイロード 私は 'payload'キーが自動的に{redux-actions 'から{createAction}に含まれていると推測していますか?私はこのように使いました - export const createMessage = createAction(CREATE_MESSAGE); – mtangula

+0

申し訳ありません今私はそれを取得すると思います - 私はジェネレータ関数との間で混乱していました。私はgen.next()と呼んでいますyield内の関数と対話しました – mtangula

+0

あなたは正しい軌道にいるようです。つまり、 'redux-actions'の' createAction'は自動的に 'payload'キーでオブジェクトを作成します。 –

関連する問題