Angulaire tests à défaut avec de l'Échec de l'exécution de 'envoyer' sur 'XMLHttpRequest'
Je suis en train de tester mon angulaire 4.1.0 composant -
export class CellComponent implements OnInit {
lines: Observable<Array<ILine>>;
@Input() dep: string;
@Input() embedded: boolean;
@Input() dashboard: boolean;
constructor(
public dataService: CellService,
private route: ActivatedRoute,
private router: Router, private store: Store<AppStore>) {
}
}
Cependant, un simple "devrait créer" test génère cette erreur cryptique...
NetworkError: Échec de l'exécution de 'envoyer' sur 'XMLHttpRequest': impossible de charger "ng:///DynamicTestModule/module.ngfactory.js'.
j'ai donc trouvé cette question, ce qui suggère que le problème est le composant a @Input)_
paramètres qui ne sont pas, cependant, si je modifie mon test comme ceci:
it('should create', inject([CellComponent], (cmp: CellComponent) => {
cmp.dep = '';
cmp.embedded = false;
cmp.dashboard = false;
expect(cmp).toBeTruthy();
}));
alors, je reçois toujours le même problème, de la même façon, si je retire la @Input()
annotations de la composante, toujours pas de différence. Comment puis-je obtenir ces tests à passer?
- Afin de créer un composant, vous devez fournir toutes les dépendances. Pouvez-vous montrer à tous votre configuration de test? Je vais essayer de reproduire le problème sur plnkr
- J'ai eu ce même problème et a trouvé les mêmes postes que vous avez fait. J'ai été en mesure de trouver une solution. J'ai fini de poster sur l'autre question, mais vous pouvez prendre un coup d'oeil ici: stackoverflow.com/a/45419372/6739517 j'Espère que ça aide!
- voir ceci: github.com/angular/angular-cli/issues/7296
Vous devez vous connecter pour publier un commentaire.
C'est un problème de la nouvelle Angulaire de la Cli. Exécutez vos tests avec
--sourcemaps=false
et vous aurez le droit à des messages d'erreur.Voir plus de détails ici: https://github.com/angular/angular-cli/issues/7296
EDIT:
D'abréviation pour cela est:
ng test -sm=false
Comme angulaire 6 la commande est:
ng test --source-map=false
J'ai eu le même problème à l'aide de angualar cli 6, j'ai utilisé cette balise pour obtenir le bon message d'erreur :
Peut-être que ça va aider quelqu'un 🙂 .
Pour mon cas, il y avait une maquette de problème de données et, en cas de
Array
, j'étais de retourstring
de la maquette.Beaucoup de temps, il arrive quand vous vous moquez de données est incomplète ou incorrecte.
Vous pouvez soit définir input() propriété valeur par défaut dans composant.ts
OU
Modifier votre composant.spec.ts fichier de la manière suivante,
Comme suggéré ci-dessus ici: https://stackoverflow.com/a/45570571/7085047 mon problème était dans ma
ngOnInit
. J'ai été l'appel d'une maquette swagger généré RESTE contrôleur de proxy. C'était de retourner la valeur null, et j'ai été souscrire à cette null, ce qui ne fonctionne pas...L'erreur est revenue:
Failed to load ng:///DynamicTestModule/MockNodeDashboardComponent_Host.ngfactory.js: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
J'ai résolu le problème en utilisant ts-mockito: https://github.com/NagRock/ts-mockito
J'ai ajouté le code pour créer une maquette exemple comme ceci:
Et ensuite ajouté l'instance à l'épreuve des prestataires tableau comme ceci:
Cela peut être lié à Chrome cacher un test d'erreur. La zone de test sera source de confusion, certains se moquer http usine qu'il ne peut pas charger et donc qu'est l'erreur, il fera rapport. Le plus probable de l'erreur sera autour de la ngOnInit zone où un objet est, par exemple, s'attendant à des sous-objets et ils ne sont pas définis.
Pour essayer d'obtenir au fond de l'erreur, passez à PhantomJS temporairement qui semble souffrent moins de ces erreurs d'initialisation et ce sera, espérons-le rapport de l'erreur réelle pour vous. À plusieurs reprises j'ai trouvé pour être un objet prévu lors de l'initialisation n'est pas complète.
C'est à dire:
La correction de l'objet a permis PhantomJS pour compléter et aussi Chrome pour passer au test suivant.
D'autres que je n'ai pas vu une solution pour supprimer le problème à partir de Chrome. Comme jamais essayer et d'adopter un "supprimer le code, jusqu'à ce que l'erreur se passe" la politique de rattraper l'erreur.
J'ai aussi eu cette erreur, qui à vrai dire est assez non bavard.
Il était lié à l'appel HTTP creux de mes services
- Je utiliser myService.ts avec 2 méthodes
Je suis moqueur de ce service : mockMyService.ts
L'erreur est ici parce que mon composant à l'aide de getAll() la méthode que j'ai oublié de le mettre en œuvre dans le mockMyService, donc j'ai juste ajouté de la méthode :
Erreur a disparu 🙂
J'ai connu le même problème, et j'ai trouvé que pour le fixer, vous devez définir vos entrées pour le composant dans la méthode beforeEach comme indiqué ci-dessous:
Cela va certainement résoudre votre problème.
Dans mon cas, le coupable était
observable.timeout(x).retry(y)
appliqué quelque part sur le retour de l'Observable sur le service, le niveau de la classe, puis de nouveau le composant qui a été à l'aide de ce service.Tout a fonctionné correctement dans le navigateur jusqu'à ce angulaires-cli 1.4. Puis a commencé à défaut pendant le Karma des tests (avec une stupide erreur). La solution était bien sûr pour ranger ces timeout/relance des opérateurs.
Pour moi, ce message s'affiche lorsqu'une maquette est falsy dans mes tests : généralement vous fournir mockService dans vos tests de bootstrap. Si votre maquette est incomplète ou falsy, puis angulaire de retour cette stupide erreur.
Plus d'informations sur mon cas ici
Ce que je voudrais faire, c'est:
Ajouter de la console.log() s, ligne après ligne dans ngOnint() et de savoir dans quelle mesure il s'en va , puis inspecter la ligne dont il l'habitude de passer à travers.
Ex:
Ce n'était pas sur de mon test avec le même message d'erreur dans ce post. Comme indiqué ci-dessus, j'ai eu deux console.journaux. D'abord on est passé thorugh , mais le deuxième pas. Donc, j'ai réalisé que le problème est à la ligne const id = params.get('id'); et je l'ai corrigé.
Espère que cela aidera quelqu'un.