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 が肥大化しそうだけどテストしたい本質が小さいとか、色々な理由で使えるだろう。