首先是我的设置。我尝试测试一些Ionic Pages等。 我有一个登录页面,我想测试登录。
这是我的登录方式:
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方法正在返回一个promise,如果promise被拒绝,它应该抛出一个自定义错误。
对于我的单元测试,我将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)
我知道这不起作用,因为promise是异步的,并且在抛出错误之前大小写会失败。但除了将doLogin改为承诺之外,我找不到任何合适的解决方案。
如何在常规功能中检查此Promise?