angular jasmine angular-material angular-material2 mddialog

Angular Material and Jasmine: “No hay proveedor para InjectionToken MdDialogData! ”



angular-material angular-material2 (4)

Tengo un componente destinado a ser usado en un MdDialog de Material Angular:

@Component({ ... }) export class MyComponent { constructor(@Inject(MD_DIALOG_DATA) public data: any, public dialogRef: MdDialogRef<MyComponent>) { ... } }

Estoy tratando de probarlo con Jasmine:

describe(''MyComponent'', () => { let component: MyComponent; let fixture: ComponentFixture<MyComponent>; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ SharedTestingModule, ], declarations: [ MyComponent, ], }) .compileComponents(); })); ... });

Desafortunadamente, estoy recibiendo el siguiente error:

Error: No hay proveedor para InjectionToken MdDialogData!

SharedTestingModule importa y exporta mi módulo de material angular personalizado, que a su vez importa y exporta MdDialogModule.

¿Cómo puedo deshacerme de este error?

¡Muchas gracias!

Angular 4.2.4 Angular Material 2.0.0-beta.7 Jasmine 2.5.3


Agregué esto:

providers: [ { provide: MD_DIALOG_DATA, useValue: {} }, { provide: MdDialogRef, useValue: {} } ]

Y funciona :)

Gracias por tu ayuda @methgaard!


Para angular 5 con último componente material.

providers: [ { provide: MAT_DIALOG_DATA, useValue: {} }, { provide: MatDialogRef, useValue: {} } ]


como actualización, esto también se replica para aquellos que usan las etiquetas con el prefijo "Mat"

providers: [{provide: MAT_DIALOG_DATA, useValue: {}}, {provide: MatDialogRef, useValue: {}}]


prueba esto

beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ SharedTestingModule, ], declarations: [ MyComponent, ], providers: [ <-- here { provide: MdDialogData, useValue: {}, } ] <-- to here }) .compileComponents(); }));

Déjame saber como va