首页 > 解决方案 > 如何在 saga 中测试 firebase 功能?

问题描述

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

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);

标签: reactjsunit-testingreduxfirebase-authenticationredux-saga

解决方案


不得不使用jest.spyOnfirebase功能,然后验证下一步。下面回答:

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();
  });

推荐阅读