首页 > 解决方案 > 常规函数内的 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?

标签: promisekarma-runnerkarma-jasmine

解决方案


推荐阅读