Angular Material and Jasmine : " No provider for InjectionToken MdDialogData! "
Solution 1:
I added this :
providers: [
{ provide: MAT_DIALOG_DATA, useValue: {} },
{ provide: MdDialogRef, useValue: {} }
]
And it works :)
Thanks for your help @methgaard!
Solution 2:
For Angular 5 with latest Material Component
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
and
providers: [
{ provide: MAT_DIALOG_DATA, useValue: {} },
{ provide: MatDialogRef, useValue: {} }
]
Solution 3:
try this
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
SharedTestingModule,
],
declarations: [
MyComponent,
],
providers: [ <-- here
{
provide: MdDialogData,
useValue: {},
}
] <-- to here
})
.compileComponents();
}));
let me know how it goes
Solution 4:
as an update, this is also replicated for those who use the tags with the prefix "Mat"
providers: [{provide: MAT_DIALOG_DATA, useValue: {}},
{provide: MatDialogRef, useValue: {}}]
Solution 5:
you can inject MAT_DIALOG_DATA / MAT_BOTTOM_SHEET_DATA in jasmine tests without specifying a provider. you must simply ensure that the value being injected is non-null. if it is null, the compiler mistakes the null value for a non-existing provider and you get the provider not found error.