J'ai un composant destiné à être utilisé dans un Angular Material MdDialog:
@Component({
...
})
export class MyComponent {
constructor(@Inject(MD_DIALOG_DATA) public data: any, public dialogRef:
MdDialogRef<MyComponent>) {
...
}
}
J'essaie de le tester à l'unité avec Jasmine:
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
SharedTestingModule,
],
declarations: [
MyComponent,
],
})
.compileComponents();
}));
...
});
Malheureusement, j'obtiens l'erreur suivante:
Erreur: Pas de fournisseur pour InjectionToken MdDialogData!
SharedTestingModule importe et exporte mon module personnalisé Angular Material, qui importe et exporte lui-même MdDialogModule.
Comment puis-je me débarrasser de cette erreur?
Merci beaucoup!
Angular 4.2.4
Angular Material 2.0.0-beta.7
Jasmine 2.5.3
J'ai ajouté ceci:
providers: [
{ provide: MD_DIALOG_DATA, useValue: {} },
{ provide: MdDialogRef, useValue: {} }
]
Et il fonctionne :)
Merci pour votre aide @methgaard!
Pour Angular 5 avec le dernier composant matériel
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
et
providers: [
{ provide: MAT_DIALOG_DATA, useValue: {} },
{ provide: MatDialogRef, useValue: {} }
]
essaye ça
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
SharedTestingModule,
],
declarations: [
MyComponent,
],
providers: [ <-- here
{
provide: MdDialogData,
useValue: {},
}
] <-- to here
})
.compileComponents();
}));
laissez-moi savoir comment ça se passe
en tant que mise à jour, ceci est également répliqué pour ceux qui utilisent les balises avec le préfixe "Mat"
providers: [{provide: MAT_DIALOG_DATA, useValue: {}},
{provide: MatDialogRef, useValue: {}}]
vous pouvez injecter MAT_DIALOG_DATA/MAT_BOTTOM_SHEET_DATA dans des tests jasmine sans spécifier de fournisseur. vous devez simplement vous assurer que la valeur en cours d'injection est non nulle. si elle est nulle, le compilateur confond la valeur null pour un fournisseur non existant et vous obtenez l'erreur fournisseur introuvable.