Проверьте значение, возвращаемое из ловушки, установленной слушателем аутентификации firebase - PullRequest
1 голос
/ 19 февраля 2020

Привет, я немного растерялся, как проверить крючок. У меня есть хук useFirebase, который возвращает { user, loginToFirebase }

  1. user это зарегистрированный пользовательский объект
  2. loginToFirebase это метод, который может быть вызван для аутентификации пользователя , Этот метод ничего не возвращает по дизайну. Вместо этого, когда пользователь входит в систему, слушатель onAuthStateChanged вызывает firebase, и внутри этого слушателя я устанавливаю user в состояние перехвата.

function loginToFirebase(email: string, password: string): void {
  firebase
    .auth()
    .signInWithEmailAndPassword(email, password)
    .catch(function(error) {
      var errorCode = error.code;
      var errorMessage = error.message;
      if (errorCode === "auth/wrong-password") {
        console.log("Wrong password.");
      } else {
        console.log(errorMessage);
      }
      console.log(error);
    });
}

function useFirebase() {
  const [user, setUser] = useState<firebase.User | null>(null);

  !firebase.apps.length && firebase.initializeApp(firebaseConfig);

  useEffect(
    () =>
      firebase.auth().onAuthStateChanged(user => {
        user && setUser(user);
      }),
    []
  );

  return {
    user,
    loginToFirebase,
    addWordToFirebase,
    getAllWords,
    logout
  };
}

Теперь я пытаюсь написать тест для этого, но я не уверен, что это правильный путь. Это то, что у меня сейчас есть

  test("Should have user user on successful login", done => {
    const { result } = renderHook(() => useFirebase());
    act(() => {
      result.current.loginToFirebase("test@gmail.com", "test");
    });

    setTimeout(() => {
      console.log(result.current.user);
      done();
    }, 2000);
  });

Технически это работает с предупреждениями Warning: An update to TestHook inside a test was not wrapped in act(...).. Как правильно проверить этот сценарий? Стоит ли мне все издеваться или есть другой способ подождать, пока не появится пользовательский объект?

Это действительный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...