测试模块

学习目标

  • 决定是否以及如何测试Angular模块

  • 编写冒烟测试以尽早捕捉模块错误

模块是Angular应用程序的核心部分。它们通常包含重要的设置代码。然而,由于没有典型的逻辑,只有复杂的配置,因此它们很难进行测试。

仅元数据

Angular模块是类,但大多数情况下,类本身是空的。其实质在于使用 @NgModule({ … }) 设置的元数据。

我们可以窥探元数据,检查是否提供了特定的服务,是否导入了第三方模块,以及是否导出了组件。

但这样的测试只是复制实现。代码重复不会增加你的信心,只会增加变更的成本。

我们应该为模块编写测试吗?如果模块中存在引用错误,在自动化测试检查构建之前,编译步骤(ng build)就会失败。“快速失败”从软件质量的角度来看是好的。

冒烟测试(smoke test)

在运行时,有些模块错误只会暴露出来。可以使用冒烟测试来捕捉这些错误。假设有以下模块:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ExampleComponent } from './example.component';

@NgModule({
  declarations: [ExampleComponent],
  imports: [CommonModule],
})
export class FeatureModule {}

我们编写以下冒烟测试:

import { TestBed } from '@angular/core/testing';
import { FeatureModule } from './example.module';

describe('FeatureModule', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [FeatureModule],
    });
  });

  it('initializes', () => {
    const module = TestBed.inject(FeatureModule);
    expect(module).toBeTruthy();
  });
});

这个集成测试使用TestBed来导入待测试的模块。它验证在导入模块时是否出现错误。