Redux-sagaは、条件付きステートメントを使用したテストを選択します

untemps

selectを使用してストアから値を取得し、この値に従ってステートメントまたは別のステートメントを実行するサガを作成しました。

const {id} = action.payload;
try {
  const cache = yield select(state => state.cache);
  if (cache[id]) {
    // Do something
  } else {
    // Do something else
} catch (e) {
  // errors
}

私はreact-mock-storeでストアをモックしようとしました:

import configureStore from 'redux-mock-store';
import createSagaMiddleware from 'redux-saga';
import { expect } from 'chai';
import { getCacheSaga } from '../../../src/js/sagas/cache-saga';
import { GET_CACHE } from '../../../src/js/actions/cache-actions';

const middlewares = [createSagaMiddleware()];
const mockStore = configureStore(middlewares);
mockStore({ cache: { foo: {} } });

describe('get cache saga', () => {
  describe('getCacheSaga', () => {
    it('retrieves data from cache', () => {
    const iterator = getFormSaga({
      payload: { id: 'foo' },
    });
    const cache = iterator.next();
    console.log(cache); // undefined
  });
});

しかし、それは機能しません。何か案は?

ユーリー・タラバンコ

Sagasは、実際に効果を実行せずに効果を宣言するだけです。それが基本的に、モックなしでテストできる理由です。

したがって、何もモックする必要はありません。テスト効果の説明。

セレクターを公開する

// cache-selector

export default state => state.cache

内部テスト

import getCache from './cache-selector'

describe('get cache saga', () => {
  describe('getCacheSaga', () => {
    it('retrieves data from cache', () => {
    const iterator = getFormSaga({
      payload: { id: 'foo' },
    });
    expect(iterator.next().value).to.be.deep.equal(select(getCache))

    // fake effect
    const fakeCache = { foo: 'bar'}
    const nextEffect = iterator.next(fakeCache)

    // next assertion

    expect(nextEffect.value).to.be.deep.equal(...)


  });
})

ロングリード

次の例を考えてみましょう

次のことを行う関数をテストする必要があるとします。

function roll() {
  if(Math.random() > 0.5) {
    console.log('OK')
  } else {
    console.error('FAIL')
  }
}

それをテストする方法は?簡単な答えはあざけることでしょう。そして、ここであなたがモックする必要がありますMath.randomconsole.logconsole.error

佐賀では、モックなしでそれを行うことができます。宣言型効果を使用して最初に書き直す

function* rollSaga() {
  const random = yield call(Math.random)

  if(random > 0.5) {
     yield call(console.log, 'OK')
  } else {
     yield call(console.log, 'FAIL'
  }
}

次にテストします

it('should call Math.random', () => {
   const iter = rollSaga()

   expect(iter.next().value).to.be.deep.equal(call(Math.random))
})

it('should log OK if random is > 0.5', () => {
   const iter = rollSaga()

   iter.next() // call random

   expect(iter.next(0.6).value).to.be.deep.equal(call(console.log, 'OK'))
})

it('should show error if random is < 0.5', () => {
   const iter = rollSaga()

   iter.next() // call random

   expect(iter.next(0.4).value).to.be.deep.equal(call(console.error, 'FAIL'))
})

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Redux Sagaをトリガーするアクションの値を使用して、ReduxSagaをテストします。

分類Dev

複数のselectを使用したredux-sagaのテスト

分類Dev

redux-sagaは、UIコンポーネントの状態に応じて条件付きでワーカーをサブスクライブします

分類Dev

Jestを使用してRedux-sagaでRxDBをテストする方法は?

分類Dev

サンクを使用したJestテストのreduxアクションはステートメットをカバーしていません

分類Dev

冗談でエラーをキャッチしたときにRedux-Sagaをテストする方法

分類Dev

リストの選択したアイテムをReduxに保存するパターン

分類Dev

redux-saga-test-planexpectSaga-状態ブランチを使用したレデューサーのテスト

分類Dev

酵素を使用したReact / Reduxテスト

分類Dev

jestを使用したReduxテスト

分類Dev

Jestを使用したセレクター機能でredux-sagaをユニットテストできません

分類Dev

CombineReducerを使用したRedux-sagaストア構成エラー

分類Dev

reactjs / reduxアプリケーションのリストで選択したアイテムをどのように維持しますか?

分類Dev

moxiosを使用したredux非同期メソッドのテスト

分類Dev

@ angular-redux / store @select()で装飾されたプロパティで非同期を使用するコンポーネントをテストしようとしています-ドキュメントは存在しません

分類Dev

Jest:条件付きのinitialStateを使用するReduxレデューサーをテストする方法はありますか?

分類Dev

redux saga、条件付きでスロットル/デバウンス?

分類Dev

Jestを使用したreduxストアのテスト

分類Dev

ReduxフォームonSubmitは、テストで空のオブジェクトを値付けします

分類Dev

React&Redux内でEnzymeを使用してネストされたコンポーネントをテスト

分類Dev

React&Redux内でEnzymeを使用してネストされたコンポーネントをテスト

分類Dev

React&Redux内でEnzymeを使用してネストされたコンポーネントをテスト

分類Dev

インデックス付きの配列にアイテムを追加します-reduxとredux-sagaに反応します

分類Dev

react-reduxフックを使用してコンポーネントをテストする方法は?

分類Dev

API応答ステータスに応じてredux-sagaをインターセプトする方法は?

分類Dev

Reduxは強制更新後にのみ機能します(コンテキスト/プロバイダーを使用)

分類Dev

redux-sagaのユニットテストでエラーが発生します:runSagaをイテレータで呼び出す必要があります

分類Dev

<Provider />を使用したReact / Reduxコンポーネントとコンテナーのテスト

分類Dev

redux-saga-test-planでredux-saga関数をテストする方法がわかりません

Related 関連記事

  1. 1

    Redux Sagaをトリガーするアクションの値を使用して、ReduxSagaをテストします。

  2. 2

    複数のselectを使用したredux-sagaのテスト

  3. 3

    redux-sagaは、UIコンポーネントの状態に応じて条件付きでワーカーをサブスクライブします

  4. 4

    Jestを使用してRedux-sagaでRxDBをテストする方法は?

  5. 5

    サンクを使用したJestテストのreduxアクションはステートメットをカバーしていません

  6. 6

    冗談でエラーをキャッチしたときにRedux-Sagaをテストする方法

  7. 7

    リストの選択したアイテムをReduxに保存するパターン

  8. 8

    redux-saga-test-planexpectSaga-状態ブランチを使用したレデューサーのテスト

  9. 9

    酵素を使用したReact / Reduxテスト

  10. 10

    jestを使用したReduxテスト

  11. 11

    Jestを使用したセレクター機能でredux-sagaをユニットテストできません

  12. 12

    CombineReducerを使用したRedux-sagaストア構成エラー

  13. 13

    reactjs / reduxアプリケーションのリストで選択したアイテムをどのように維持しますか?

  14. 14

    moxiosを使用したredux非同期メソッドのテスト

  15. 15

    @ angular-redux / store @select()で装飾されたプロパティで非同期を使用するコンポーネントをテストしようとしています-ドキュメントは存在しません

  16. 16

    Jest:条件付きのinitialStateを使用するReduxレデューサーをテストする方法はありますか?

  17. 17

    redux saga、条件付きでスロットル/デバウンス?

  18. 18

    Jestを使用したreduxストアのテスト

  19. 19

    ReduxフォームonSubmitは、テストで空のオブジェクトを値付けします

  20. 20

    React&Redux内でEnzymeを使用してネストされたコンポーネントをテスト

  21. 21

    React&Redux内でEnzymeを使用してネストされたコンポーネントをテスト

  22. 22

    React&Redux内でEnzymeを使用してネストされたコンポーネントをテスト

  23. 23

    インデックス付きの配列にアイテムを追加します-reduxとredux-sagaに反応します

  24. 24

    react-reduxフックを使用してコンポーネントをテストする方法は?

  25. 25

    API応答ステータスに応じてredux-sagaをインターセプトする方法は?

  26. 26

    Reduxは強制更新後にのみ機能します(コンテキスト/プロバイダーを使用)

  27. 27

    redux-sagaのユニットテストでエラーが発生します:runSagaをイテレータで呼び出す必要があります

  28. 28

    <Provider />を使用したReact / Reduxコンポーネントとコンテナーのテスト

  29. 29

    redux-saga-test-planでredux-saga関数をテストする方法がわかりません

ホットタグ

アーカイブ