redux-sagaの「すべて」の効果をテストするための最良の方法は何ですか?

7over21

私は現在aを持っているサガを持っていて、yield all(...)私が実際all()に正しい関数で呼び出していることを確認するためにテストする方法を理解しようとしています。これが私が取り組んでいるものの簡略版です:

function* start() {
  // I'd prefer not to start the status polling and the listening for
  // the cancellation until after the request has been submitted, but
  // I'm having trouble figuring out how to do that. So I'm just going
  // to listen for 'em all up front here until I'm smarter.
  yield all([
    waitForCreateRequest(),
    waitForPollStatus(),
    waitForCancelRequest(),
  ])
}

function* waitForCreateRequest() {
  while ( true ) {  
    try {
      const { payload } = yield take('CREATE_REQUEST')
      // ...
    } catch ( error ) {
      // ...
    }
  }
}

function* waitForPollStatus() {
  while ( true ) {  
    try {
      const { payload } = yield take('POLL_STATUS')
      // ...
    } catch ( error ) {
      // ...
    }
  }
}

function* waitForCancelRequest() {
  while ( true ) {  
    try {
      yield take('CANCEL_REQUEST')
      // ...
    } catch ( error ) {
      // ...
    }
  }
}

私が(Mochaとを使用してbdd-lazy-var書いたテストは次のようになります。

describe('MySaga', () => {
  describe('*start()', () => {
    subject(start())

    it('calls `all()` with the correct functions', () => {
      expect($subject.next().value).to.eql(all([
        waitForSubmitExportRequest(),
        waitForPollExportStatus(),
        waitForCancelExportRequest(),
      ]))
    })
  })
})

出力はありません-ハングするだけです...そして「JavaScriptヒープがメモリ不足です」というエラーが表示されます。

私は、もしconsole.log($subject.next().value)代わりに:

describe('MySaga', () => {
  describe('*start()', () => {
    subject(start())

    it.only('foo', () => {
      console.log($subject.next().value)
    })
  })
})

これは私が得るものです:

  MySaga
    *start()
{ '@@redux-saga/IO': true,
  ALL: 
   [ GeneratorFunctionPrototype { _invoke: [Function: invoke] },
     GeneratorFunctionPrototype { _invoke: [Function: invoke] },
     GeneratorFunctionPrototype { _invoke: [Function: invoke] } ] }
      ✓ foo

だから私はここで何が起こっているのかわかりません。

数え切れないほどのグーグル検索は実際には何も役に立たなかったし、私が見つけた最も近いSO投稿(redux-sagaをjestを使ってすべての効果をテストする方法)も役に立たなかった。

アレックス

あなたのstart関数がジェネレーター関数ではないというのはタイプミスですか?

とにかく。次のstartように関数を書き直してみてください

function* start() {
  yield all([
    call(waitForCreateRequest),
    call(waitForPollStatus),
    call(waitForCancelRequest),
  ])
}

これで、テストは次のようになります。

it('calls `all()` with the correct functions', () => {
  expect($subject.next().value).to.eql(all([
    call(waitForSubmitExportRequest),
    call(waitForPollExportStatus),
    call(waitForCancelExportRequest),
  ]))
})

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テキスト入力Reduxを作成するための最良の方法は何ですか

分類Dev

React Jsを操作するための最良の方法は何ですか:Redux、フック、またはコンテキスト?

分類Dev

すべてのreduxフォームが正常に送信されたことを理解するための最良の方法は何ですか?

分類Dev

Reduxでは、サーバーにデータを投稿するための最良の方法は何ですか?

分類Dev

reduxと組み合わせて反応するために使用する最良の方法は何ですか?

分類Dev

reactでredux状態を使用して動的URL変更を行うための最良の方法は何ですか?

分類Dev

ReactとReduxでデータ集約型のリクエストを処理するための最良の方法は何ですか?

分類Dev

React Nativeとredux:動的なスタイルを保存管理するための良い方法は何ですか?

分類Dev

es6標準のreduxでミックスインを使用する最良の方法は何ですか?

分類Dev

React Reduxで元に戻す状態の変更(元に戻すストア/履歴の実装)を実装するための最良の方法は何ですか

分類Dev

ReduxストアでFlatListを更新する最良の方法

分類Dev

インデックス付きオブジェクトをReduxストア(Redux Toolkit)に追加する最良の方法は何ですか?

分類Dev

redux-sagaの遅延をテストする方法

分類Dev

すべてのデータをvuexまたはreduxに保存するのは良いですか?

分類Dev

React ReduxでFORMデータを送信する最良の方法は?

分類Dev

React Reduxでネストされた状態を更新していますが、構文の何が問題になっていますか?このレデューサーを書くためのより良い方法はありますか?

分類Dev

redux-sagaウォッチャーのユニットテストのポイントは何ですか?

分類Dev

データベースからのすべてのデータをreduxストアに保存するのは良い考えですか

分類Dev

react reduxでフェッチエラーに対処する最良の方法は何ですか?

分類Dev

promiseを返す関数には常にredux-sagaの `call`効果を使用する必要がありますか?

分類Dev

React + Redux-フォームコンポーネントでCRUDを処理する最良の方法は何ですか?

分類Dev

reactjsコンストラクタreduxで初期状態を設定するためのベストプラクティスは何ですか?

分類Dev

React / ReduxアプリケーションのCookieでJWTを保護するための最適な方法は何ですか?

分類Dev

コンポーネント内でredux状態を使用するためのベストプラクティスは何ですか?

分類Dev

Redux:正規化された状態ツリーでブール値を切り替える最良の方法は何ですか?

分類Dev

redux-sagaのウォッチャーのポイントは何ですか?

分類Dev

redux sagaは、1つが失敗したときに、他の効果をすべてキャンセルします。

分類Dev

redux-sagaのすべてのエフェクトを使用してエラーに対処する方法

分類Dev

佐賀の実行を待ってredux-sagaで終了する方法は?

Related 関連記事

  1. 1

    テキスト入力Reduxを作成するための最良の方法は何ですか

  2. 2

    React Jsを操作するための最良の方法は何ですか:Redux、フック、またはコンテキスト?

  3. 3

    すべてのreduxフォームが正常に送信されたことを理解するための最良の方法は何ですか?

  4. 4

    Reduxでは、サーバーにデータを投稿するための最良の方法は何ですか?

  5. 5

    reduxと組み合わせて反応するために使用する最良の方法は何ですか?

  6. 6

    reactでredux状態を使用して動的URL変更を行うための最良の方法は何ですか?

  7. 7

    ReactとReduxでデータ集約型のリクエストを処理するための最良の方法は何ですか?

  8. 8

    React Nativeとredux:動的なスタイルを保存管理するための良い方法は何ですか?

  9. 9

    es6標準のreduxでミックスインを使用する最良の方法は何ですか?

  10. 10

    React Reduxで元に戻す状態の変更(元に戻すストア/履歴の実装)を実装するための最良の方法は何ですか

  11. 11

    ReduxストアでFlatListを更新する最良の方法

  12. 12

    インデックス付きオブジェクトをReduxストア(Redux Toolkit)に追加する最良の方法は何ですか?

  13. 13

    redux-sagaの遅延をテストする方法

  14. 14

    すべてのデータをvuexまたはreduxに保存するのは良いですか?

  15. 15

    React ReduxでFORMデータを送信する最良の方法は?

  16. 16

    React Reduxでネストされた状態を更新していますが、構文の何が問題になっていますか?このレデューサーを書くためのより良い方法はありますか?

  17. 17

    redux-sagaウォッチャーのユニットテストのポイントは何ですか?

  18. 18

    データベースからのすべてのデータをreduxストアに保存するのは良い考えですか

  19. 19

    react reduxでフェッチエラーに対処する最良の方法は何ですか?

  20. 20

    promiseを返す関数には常にredux-sagaの `call`効果を使用する必要がありますか?

  21. 21

    React + Redux-フォームコンポーネントでCRUDを処理する最良の方法は何ですか?

  22. 22

    reactjsコンストラクタreduxで初期状態を設定するためのベストプラクティスは何ですか?

  23. 23

    React / ReduxアプリケーションのCookieでJWTを保護するための最適な方法は何ですか?

  24. 24

    コンポーネント内でredux状態を使用するためのベストプラクティスは何ですか?

  25. 25

    Redux:正規化された状態ツリーでブール値を切り替える最良の方法は何ですか?

  26. 26

    redux-sagaのウォッチャーのポイントは何ですか?

  27. 27

    redux sagaは、1つが失敗したときに、他の効果をすべてキャンセルします。

  28. 28

    redux-sagaのすべてのエフェクトを使用してエラーに対処する方法

  29. 29

    佐賀の実行を待ってredux-sagaで終了する方法は?

ホットタグ

アーカイブ