10
votes

Erreur de test de l'unité Karma: valeur inattendue importée par le module. Veuillez ajouter une annotation @NgModule

J'ai créé un nouveau composant via:

import { MatDialogRef } from '@angular/material';

//...

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

Ensuite, j'ai changé la ligne du constructeur en ceci:

ng test

, et ajouté l'importation requise:

import { MatDialogRef } from '@angular/material';

Après cela, j'ai exécuté le projet de test unitaire Karma via:

constructor(private dialogRef: MatDialogRef<Mytest1Component>) { }

Le test a échoué. J'ai reçu ce message d'erreur:

Erreur: StaticInjectorError (DynamicTestModule) [Mytest1Component -> MatDialogRef]: StaticInjectorError (Platform: core) [Mytest1Component -> MatDialogRef]: NullInjectorError: Aucun fournisseur pour MatDialogRef!

Pour résoudre ce problème, j'ai ajouté l'instruction Import dans la section beforeEach:

ng g mytest1

Maintenant, j'ai cette nouvelle erreur, que je ne suis pas en mesure de corriger:

Échec: valeur inattendue 'MatDialogRef' importée par le module 'DynamicTestModule'. Veuillez ajouter une annotation @NgModule.

Quelqu'un peut-il préciser où je devrais ajouter l'annotation @NgModule, ou si j'avais fait quelque chose de complètement faux?

Merci.


0 commentaires

3 Réponses :


12
votes

Vous injectez MatDialogRef dans le composant:

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [ Mytest1Component ],
        providers: [ MatDialogRef ],
    })
    .compileComponents();
}));

Ainsi, le testBed s'attend à ce que le même soit injecté en tant que provider au TestBed. Ou vous pouvez également lui fournir un MockDialogueService .

constructor(private dialogRef: MatDialogRef<Mytest1Component>) { }


2 commentaires

Merci. Ce fut la première erreur de ma part. Maintenant, je reçois un autre problème, et je vous serais reconnaissant si vous pouviez m'aider ... Est dit, "Échec: Impossible de résoudre tous les paramètres pour MatDialogRef: (?,?,?,?)."


Mise à jour: je devais suivre la recommandation ici: stackoverflow.com/questions/48058457/...



0
votes

utilisation:

imports: [MatDialogModule],

au lieu


2 commentaires

Merci. Je reçois toujours le message, "Erreur: StaticInjectorError (DynamicTestModule) [Mytest1Component -> MatDialogRef]: StaticInjectorError (Platform: core) [Mytest1Component -> MatDialogRef]: NullInjectorError: Aucun fournisseur pour MatDialogRef!"


Mise à jour: cette ligne était utile. Ce qui manquait encore, c'était la recommandation faite par nircraft: 'fournisseurs: [MatDialogRef],' Merci pour l'aide.



-1
votes

J'avais rencontré le même problème, dans les spec.ts, donnez xdescribe au lieu de décrire. Cela a résolu le problème.


0 commentaires