Karma / Jasmin测试承诺常规函数内的错误

时间:2018-05-30 08:09:15

标签: promise karma-runner karma-jasmine

首先是我的设置。我尝试测试一些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?

0 个答案:

没有答案