测试模块
学习目标
-
决定是否以及如何测试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
来导入待测试的模块。它验证在导入模块时是否出现错误。