引发错误的单元测试构造函数

时间:2018-08-29 12:09:16

标签: angular typescript unit-testing jasmine

我有一个注入配置对象的构造函数。我正在对构造函数中的对象进行一些验证。如果验证失败,我想抛出一个错误,向用户描述出了什么问题。

我如何使用 Angular Jasmine 进行测试?

这是我现在的操作方式,但这会返回失败的测试:

import { TestBed, inject } from '@angular/core/testing';

import { AwsCognitoService } from './aws-cognito.service';
import { AWS_COGNITO_CONFIG, AwsCognitoConfig } from './aws-cognito.config';

describe('AwsCognitoService', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        AwsCognitoService,
        {
          provide: AWS_COGNITO_CONFIG,
          useValue: new AwsCognitoConfig({
            region: 'eu-west-1'
          })
        }
      ]
    });
  });

  it('should throw error when missing userPoolId or identityPoolId', inject(
    [AwsCognitoService],
    (service: AwsCognitoService) => {
        expect(service).toThrowError('Missing required configuration property: userPoolId or identityPoolId');
    }
  ));
});

完整测试源:stackblitz example

1 个答案:

答案 0 :(得分:2)

Here is the stackblitz

您可能知道,在创建类的新实例时会调用构造函数。

Jasmine的expect函数可以接受一个函数并将其隔离,让您期待之后。

使用此语法,您可以创建Jasmine可以监视的隔离功能。如您所见,您的测试通过了。

it('should throw error with missing param', () => {
  expect(() => new AwsCognitoService({} as any)).toThrowError();
});