Как протестировать блок кода появления саги Redux

я хочу протестировать блок спавна с помощью шутки... я создал генератор в блоке beforeEach и проверяю функцию
генератора.next(), как это

    beforeEach(() => {
        generator = saga.postCompare();
    });

и мой код такой

    export function* LoadData() {
      let someVariable;
      try {
       for (let index = 0; index < 3; index += 1) {
            yield spawn(loadUserData, varaiable1, variable2);
       }
     }
   }

   export function* loadUserData(Prop1, Prop2) {
      try {
        const userData = yield call(serverManager.fetch1,prop1, prop2 );
        const isUserSelected = yield* isUserSelected();
        if (!isUserSelected) {
          return;
        }
        yield put(
          Actions.onRequestSucceededForUser(userData.data.value, prop1),
        );
      } 
    }

person kumar    schedule 27.11.2017    source источник


Ответы (1)


я хочу протестировать блок возрождения с помощью шутки

Возможно, наиболее простое решение принято для тестирования генераторов redux-saga - просто по определению того, как они работают, и ничего не имитируя. Таким образом, каждый saga — это просто функция-генератор, которая передает поток управления родительской функции при каждом операторе yield. Кроме того, saga-effects на самом деле ничего не делает - просто создает специальный объект формы, который принимается redux-saga внутренним менеджером процессов (https://github.com/redux-saga/redux-saga/blob/master/src/internal/io.js )

Таким образом, вы можете легко запустить функцию saga под тестом из средства запуска тестов и выполнить утверждения для возвращаемых действий, например:

const saga = LoadData();
assert(saga.next()).to.be.deep.equal(spawn(loadUserData, varaiable1, variable2))
assert(saga.next()).to.be.deep.equal(spawn(loadUserData, varaiable1, variable2))
assert(saga.next()).to.be.deep.equal(spawn(loadUserData, varaiable1, variable2))

При этом функция loadUserData выполняться не будет, а также будут созданы объекты-дескрипторы эффектов

person Vladislav Ihost    schedule 27.11.2017