82

Angular Material MdDialog で使用するためのコンポーネントがあります:

@Component({
  ...
})
export class MyComponent {

  constructor(@Inject(MAT_DIALOG_DATA) public data: any, public dialogRef: 
MdDialogRef<MyComponent>) {
...
  }


}

私は Jasmine で単体テストをしようとしています:

describe('MyComponent', () => {
  let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        SharedTestingModule,
      ],
      declarations: [
        MyComponent,
      ],
    })
    .compileComponents();
  }));

  ...
  
});

残念ながら、次のエラーが表示されます。

エラー: InjectionToken MdDialogData のプロバイダーがありません!

SharedTestingModule は、MdDialogModule をインポートおよびエクスポートするカスタム Angular Material モジュールをインポートおよびエクスポートします。

このエラーを取り除くにはどうすればよいですか?

どうもありがとうございました!

Angular 4.2.4
Angular Material 2.0.0-beta.7
Jasmine 2.5.3
4

8 に答える 8

4

プロバイダーを指定せずにジャスミン テストに MAT_DIALOG_DATA / MAT_BOTTOM_SHEET_DATA を挿入できます。注入される値が null でないことを確認する必要があります。null の場合、コンパイラは null 値を存在しないプロバイダーと間違え、プロバイダーが見つからないというエラーが発生します。

于 2019-06-18T12:27:22.677 に答える