передать значение всех предыдущих выходов в генераторе JavaScript - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь выполнить юнит-тест моего приложения реакции, которое использует redux-saga. Ниже мой сага файл:

// sagas.js
export function* getDataFromServer() {
  try {
    const foo = yield select(fooSelector());
    const bar = yield call(barRequest);

    yield put(actions.SOME_ACTION.request());
    const mainResponse = yield call(
      api.getData,
      bar,
      foo.some_number,
      foo.some_other_number,
    );
  } catch () {
    throw error;
  }
}

Ниже приведен мой тестовый блок:

// sagas.test.js
describe("getDataFromServer", () => {
  const generator = getDataFromServer();
  it("should get Data", () => {
    expect(generator.next().value).toEqual(select(fooSelector()));
    expect(generator.next().value).toEqual(call(barRequest));
    expect(generator.next().value).
      toEqual(put(actions.SOME_ACTION.request()));
    expect(generator.next().value).toEqual(
      call(
        api.getData,
        bar,
        foo.some_number,
        foo.some_other_number,
      )
    );
  });
});

но при последнем ожидании выдает ошибку, что "не может прочитать свойство" some_number "из undefined. Это очевидно, поскольку jest не запускает все эффекты в модульном тесте саги, но мне было интересно, есть ли способ Я могу передать значение нескольких выходов в последнем утверждении - что-то вроде этого:

expect(generator.next(foo, bar).value).toEqual(
      call(
        api.getData,
        bar,
        foo.some_number,
        foo.some_other_number,
      )
    );

1 Ответ

0 голосов
/ 29 августа 2018

Это статья , которая ответила на мой вопрос.

Я сделал что-то вроде этого:

// sagas.test.js

const foo = {
  some_number = "some_number",
  some_other_number = "some_other_number"
};
const bar = "bar";
describe("getDataFromServer", () => {
const generator = getDataFromServer();
it("should get Data", () => {
  expect(generator.next().value).toEqual(select(fooSelector()));
  expect(generator.next(foo).value).toEqual(call(barRequest));
  expect(generator.next(bar).value).
    toEqual(put(actions.SOME_ACTION.request()));
  expect(generator.next().value).toEqual(
    call(
      api.getData,
      bar,
      foo.some_number,
      foo.some_other_number,
    )
    );
  });
});
...