Сначала мои настройки.Я пытаюсь протестировать некоторые из моих ионных страниц и т. Д. И у меня есть страница входа, где я хочу проверить вход.
Это мой метод входа:
doLogin() {
let authHelper = this.injector.get(AuthHelper);
authHelper.sendSignInLink(this.email).then(()=> {
window.localStorage.setItem("userMail", this.email);
let loginToast = this.toast.create({
message: "Link to email succesfully send. In order to finish the login, it is necessary to click the send link.",
duration: 3000,
position: "bottom",
});
loginToast.present();
}).catch(() => {
throw new EmailSignInLinkError("invalid Mail");
});
}
Как мы видимметод sendSignInLink возвращает обещание, и если обещание отклонено, оно должно выдать пользовательскую ошибку.
Для моего модульного теста я высмеял authHelperClass на очень простой макет:
export class AuthHelperMock {
public auth(): Promise<any> {
return new Promise((resolve, reject) => {
resolve(2);
});
}
public sendSignInLink(email: String): Promise<any> {
return new Promise((resolve, reject) => {
if (email != undefined || email != "")
resolve(1);
else
reject("Invalid email");
});
}
}
Сейчаспроблема, которую я пытаюсь проверить на этой сгенерированной ошибке из моего обещания.
Мой вариант:
it('should not do the login', () => {
component.email = "";
expect(() => {
component.doLogin();
}).toThrowError(EmailSignInLinkError)
Я знаю, что это не сработает, потому что обещание асинхронное иcase потерпит неудачу прежде, чем выдаст ошибку.Но я не нашел подходящего решения, кроме как изменить свой doLogin на обещание.
Как я могу проверить это обещание в рамках обычной функции?