Как протестировать Redx-сагу с помощью паттерна Jest? - PullRequest
0 голосов
/ 21 мая 2019

У меня есть сага, использующая эффект take, чтобы получить действие по шаблону.Теперь я пытаюсь проверить это:

Сага:

export function* mySaga(spaceId) {
  while (true) {
    const action = yield take(
      action =>
        action.type === MEDIA_SESSION_RESPONSE &&
        action.payload.data.category === ScreenShareData &&
        action.payload.data.topicId === spaceId
    );
    const remoteScreenSessionId = action.payload.data.content.sessionId;
    yield put(addRemoteScreenSessionId(remoteScreenSessionId));
  }
}

Тест:

it('test', () => {
        const gen = sagas.mySaga('space_1');
        expect(gen.next().value).toEqual(
            take(
                action =>
                    action.type === MEDIA_SESSION_RESPONSE &&
                    action.payload.data.category === ScreenShareData &&
                    action.payload.data.topicId === spaceId
            )
        );
    });

В шаблоне взятия у меня есть анонимная функция, так как яМожно ли проверить, что шаблон в дубле равен шаблону, который я предоставляю в тесте?

Результат теста сейчас:

Expected value to equal:
  {"@@redux-saga/IO": true, "combinator": false, "payload": {"pattern": [Function anonymous]}, "type": "TAKE"}
Received:
  {"@@redux-saga/IO": true, "combinator": false, "payload": {"pattern": [Function anonymous]}, "type": "TAKE"}

Если я буду использовать JSON.stringify, я не смогууверен, что шаблоны равны.

1 Ответ

0 голосов
/ 21 мая 2019

Шутка может помочь вам утверждать порядок следования слоев.В модульном тестировании вы хотите протестировать фрагмент кода (например, саги, функции и т. Д.), А не поток цепочки выполнения.Следовательно, шаблон, который вы пытаетесь проверить, имеет вид [Function anonymous].

Существует небольшая библиотека под названием k-redux-saga-tester , которая может предоставить вам гибкость утверждения наузоры.Заполните VALUE с и создайте необходимые макеты для MEDIA_SESSION_RESPONSE, ScreenShareData, spaceId.Это должно выглядеть примерно так:

describe('mySaga', () => {
     describe('search', () => {

        const test = tester(mySaga) <--- your saga
        const spaceId = 'VALUE';
        const MEDIA_SESSION_RESPONSE = 'VALUE';
        const ScreenShareData = 'VALUE';
        const payload = { data: { category: VALUE, topicId: VALUE }};
        const action = { type: 'YOUR_ACTION_TYPE', payload: { payload }};

        it('should search and set something', () => {
          const mocks = {
               take: [action =>
                    action.type === MEDIA_SESSION_RESPONSE &&
                    action.payload.data.category === ScreenShareData &&
                    action.payload.data.topicId === spaceId]
          }

      expect(test(mocks)).toMatchSnapshot()
    })
  })
})

В общем, если вы хотите проверить шаблон, используйте отдельный тест для тестирования только этой конкретной функции.И утверждать это вывод, учитывая различные аргументы.

...