Как смоделировать переменные внутри функций генератора саги-редуктора? - PullRequest
0 голосов
/ 04 мая 2020

как я могу проверить сагу ниже?

export function* getSnapShotFromUserAuth(userAuth, additionalData) {
  try {
    const userRef = yield call(
      createUserProfileDocument,
      userAuth,
      additionalData
    );
    const userSnapshot = yield userRef.get();
    yield put(signInSuccess({ id: userSnapshot.id, ...userSnapshot.data() }));
  } catch (error) {
    yield put(signInFailure(error));
  }
}

Мне удалось заставить его работать только до первой строки:

describe("getSnapShotFromUserAuth", () => {
  const mockUserAuth = {};
  const mockAdditionalData = {};
  const generator = getSnapShotFromUserAuth(mockUserAuth, mockAdditionalData);

  it("should get snapshot from user auth", () => {
    expect(generator.next().value).toEqual(
      call(createUserProfileDocument, mockUserAuth, mockAdditionalData)
    );
  });
});

Как я могу проверить следующую строку? const userSnapshot = yield userRef.get();

Я продолжаю получать сообщение об ошибке TypeError: Cannot read property 'get' of undefined при вызове, пытаясь проверить следующую строку, поскольку он не может найти userRef. Есть ли способ высмеять следующую строку?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Вы можете диктовать, каков результат yield по тому, что вы передаете, когда звоните next(). Например, после выполнения первого generator.next вы можете выполнить:

const mockUserRef = {
  get: jest.fn();
}
expect(generator.next(mockUserRef).value).toEqual(/* whatever */);
0 голосов
/ 04 мая 2020

Ответ -

it("should check for signInSuccess", () => {
    const myMock = jest.fn();
    let userRef = {
      get: myMock.mockReturnValue({
        id: 1,
        data: () => {},
      }),
    };

    let userSnapshot = {
      id: 1,
      data: () => {},
    };
    generator.next(userRef);

    expect(generator.next(userSnapshot).value).toEqual(
      put(signInSuccess({ id: userSnapshot.id, ...userSnapshot.data() }))
    );
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...