promise - 常规函数内的 Karma/Jasmin Test Promise 错误
问题描述
首先是我的设置。我尝试测试我的一些 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 正在返回一个承诺,如果承诺被拒绝,它应该抛出一个自定义错误。
对于我的单元测试,我将 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)
我知道这不会起作用,因为承诺是异步的,并且案例在引发错误之前会失败。但是除了将我的 doLogin 更改为 promise 之外,我没有找到任何合适的解决方案。
如何在常规函数中检查此 Promise?
解决方案
推荐阅读
- sql - 如何参数化 SQL Server 脚本
- css - 如何生成多个语义。
构建语义ui时的.min.css文件? - webrtc - WebRTC: how does a TURN server differ from rolling your own custom server that passes communication through?
- mysql - 4张表的内连接
- typescript - 如何在 TypeScript 中编写仅适用于字符串的函数
- azure-eventhub - 无法使用 ARM 模板创建 Eventhub
- c# - 注销后重定向在 Asp.net Core 2 中不起作用
- identityserver4 - 如何配置 Blazor 客户端以使用外部 IdentityServer4 服务器执行身份验证
- vb.net - 如何将计时器对象传递给函数?
- spring-boot - Spring Boot Admin Server 无法访问端点(未经授权的 401)