Привет, я немного растерялся, как проверить крючок. У меня есть хук useFirebase
, который возвращает { user, loginToFirebase }
user
это зарегистрированный пользовательский объект 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(...).
. Как правильно проверить этот сценарий? Стоит ли мне все издеваться или есть другой способ подождать, пока не появится пользовательский объект?
Это действительный код.