89 votes

Matériel angulaire et jasmin: "Aucun fournisseur pour InjectionToken MdDialogData!"

J'ai un composant qui est destiné à être utilisé dans un Angulaires Matériel MdDialog :

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

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


}

Je suis en train de Test de 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 les importations et les exportations à mon habitude Angulaire Matériau de module, qui lui-même les importations et les exportations 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

155voto

Wenneguen Points 657

J'ai ajouté ceci:

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

Et il fonctionne :)

Merci pour votre aide @methgaard!

99voto

user3237208 Points 1

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: {} }
 ]
 

15voto

methgaard Points 499

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

13voto

mehs2690 Points 91

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: {}}]
 

4voto

Bob Points 1

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X