如何在 saga 中测试 firebase 函数?

How to test firebase functions in saga?

我正在尝试测试以下功能:

export function* signInWithEmail({ payload: { email, password } }) {
  try {
    const { user } = yield auth.signInWithEmailAndPassword(email, password);
    yield call(getSnapShotFromUserAuth, user);
  } catch (error) {
    yield put(signInFailure(error));
  }
}

我研究了 redux-saga-test-plan 以及其他 saga 测试库,但似乎无法弄清楚如果没有使用 saga 效果调用 firebase 函数,如何测试它。

我需要一种方法来模拟 firebase 函数,同时能够测试该行是否被调用 yield call(getSnapShotFromUserAuth, user);

必须使用 jest.spyOn 作为 firebase 函数,然后验证下一步。答案如下:

it("should call getSnapShotFromUserAuth", () => {
    let userData = {
      user: {
        id: 1,
        name: "jon",
      },
    };

    let { user } = userData;

    jest
      .spyOn(auth, "signInWithEmailAndPassword")
      .mockImplementation(() => userData);

    let saga = testSaga(signInWithEmail, { payload });
    saga
      .next()
      .next({ user })
      .call(getSnapShotFromUserAuth, user)
      .next()
      .isDone();
  });