Angular のユニットテストでモジュールが存在しなくてもエラーにしない方法
Angular のユニットテストにおいて、TestBed.configureTestingModule()
に必要なコンポーネントやディレクティブ等を登録しておかないとエラーになってしまうのが鬱陶しい。そんな時は、NO_ERRORS_SCHEMA
という指定を入れてやると、コンポーネントやディレクティブが TestBed に登録されていなくてもエラーにならない。
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
// AppComponent では自作の子コンポーネントを入れていたりして、
// 本来は TestBed の decralations に追加しないとエラーになるテイ。
import { AppComponent } from './app.component';
describe('AppComponent', () => {
let component: AppComponent;
let fixture: ComponentFixture<AppComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [AppComponent],
schemas: [NO_ERRORS_SCHEMA] // ← コレを追加する
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
コレでエラーを回避してコンパイルできる。
チーム開発していて、読み込みたいコンポーネントがまだないとか、TestingModule が肥大化しそうだけどテストしたい本質が小さいとか、色々な理由で使えるだろう。