反应测试模拟实现一,使用模拟的功能

时间:2020-09-14 12:41:40

标签: reactjs firebase jestjs react-testing-library

我正在实现用于firebase身份验证的模拟功能,我已经模拟了firebase模块,如下所示:

jest.mock("../../lib/api/firebase", () => {
  return {
    auth: {
      createUserWithEmailAndPassword: jest.fn(() => {
        return {
          user: {
            uid: "fakeuid",
          },
        };
      }),
      signOut: jest.fn(),
    },
    firestore: {
      collection: jest.fn(() => ({
        doc: jest.fn(() => ({
          collection: jest.fn(() => ({
            add: jest.fn(),
          })),
          set: jest.fn(),
        })),
      })),
    },
  };
});

现在 createUserWithEmailAndPassword 返回用户uid,以在注册时伪造Firebase响应。我在测试中像这样使用它:

.
.
.
 await wait(() => {
      expect(auth.createUserWithEmailAndPassword).toHaveBeenCalled();
      expect(history.location.pathname).toBe("/dashboard");
      expect(getByText("You succesfully signed up!")).toBeInTheDocument();
    });

它工作得很好,但是如果我希望返回的值对于一次测试却有所不同,该怎么办? 我看到有一个模拟实现,这似乎是正确的路径,但是我正在努力实施它,有什么帮助吗? 谢谢, F。

1 个答案:

答案 0 :(得分:1)

您可以像这样使用 set.seed(123) split <- initial_split(lepto, prop = 0.75, strata = 'composite_outcome') lepto_train <- training(split) letp_test <- testing(split) rec2 <- recipe(composite_outcome ~ letargy + creatinine + cholestatic_syndrome + pallor + pulmonary_involvement + reduced_diuresis + heart_rate + ast + hypotension + leucocytes, data = lepto_train) %>% step_medianimpute(all_numeric()) %>% step_BoxCox(all_numeric()) %>% step_normalize(all_numeric()) %>% step_corr(all_numeric(), threshold = 0.9) %>% step_unknown(all_nominal(), -all_outcomes(), new_level = 'without_information') %>% step_dummy(all_nominal(), -all_outcomes()) %>% step_lincomb(all_predictors()) %>% step_nzv(all_predictors()) ## --- Model glm --------------------------------------- ## model_glm <- logistic_reg(mode = 'classification') %>% set_engine('glm') ## -- workflow ---------------------------------------- ## work_glm <- workflow() %>% add_recipe(rec2) %>% add_model(model_glm) ## -------Fit --------------------------------------- ## test_glm <- work_glm %>% last_fit(split) test_glm %>% collect_metrics() final_glm <- work_glm %>% fit(lepto_train) final_glm %>% pull_workflow_fit() %>% tidypredict_fit() model_logistic <- final_glm %>% pull_workflow_fit()

mockReturnValueOnce

只需确保在测试中在调用auth.createUserWithEmailAndPassword .mockReturnValueOnce(/* your desired return value here */) 之前模拟返回值

例如:

auth.createUserWithEmailAndPassword