0

redux-saga でテストしようとしています。不明な理由で generator.next(data).value を実行すると、次のようにデータが saga 関数に渡されません。

const gen = onCreateMessage()

const message = "aa"

gen.next(message).value

///佐賀機能

export function* onCreateMessage(message) {

    yield put(addMessage(message.payload))

エラーメッセージ。undefined のペイロードを読み取れません。

4

1 に答える 1

1

問題は、ジェネレーター関数が引数として を受け入れるmessageため、ジェネレーターを初期化するときにそれを渡す必要があることです。

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

gen.next().valueその後、アサーションを実行して検証する ことで、次の値を取得できます。

JS Bin の例を次に示します: 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/redux-saga@0.11.1/dist/redux-saga.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script>

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

于 2016-09-09T23:44:22.953 に答える