J'utilise Karma pour exécuter le test sur mon Angular 4 app. Cela fonctionne localement mais quand il fonctionne sur mon hôte environnement (Travis CI) il échoue avec les informations suivantes:
INFO [HeadlessChrome 0.0.0 (Ubuntu 0.0.0)]: Connected on socket vT0QnQaqRkn010dfsw with id 10189531
HeadlessChrome 0.0.0 (Ubuntu 0.0.0): Executed 0 of 180 SUCCESS (0 secs / 0 secs)
e 0.0.0 (Ubuntu 0.0.0): Executed 1 of 180 SUCCESS (0 secs / 0.714 secs)
HeadlessChrome 0.0.0 (Ubuntu 0.0.0) ERROR
Uncaught [object Object]
at http://localhost:9876/_karma_webpack_/vendor.bundle.js:14078
J'ai essayé de suivre les suggestions (suppression du cache NPM, etc.) de "Uncaught [object object]" lors de l'exécution de tests de karma sur Angular mais cela n'a pas résolu mon problème.
Comment puis-je identifier la cause de ce Uncaught [object Object]
Erreur. Quelles étapes supplémentaires dois-je suivre pour dépanner?
Divulgation complète, je suis le gars qui a résolu ce problème avec Justin.
Le problème est que nous importions des modules dans nos tests unitaires. Ces modules ont un composant qui a ngOnInit
qui fait une requête HTTP. Le module injecte le composant réel dans le test et il essaie de faire sa requête HTTP mais échoue. Parce qu'il est hors de la pile normale, la trace de la pile nous donne l'erreur très inutile Uncaught [object Object]
.
Afin d'éviter ce problème et pour que le composant ne soit pas indéfini, nous utilisons la bibliothèque utile de Christian Nunciato ng2-mock-component pour créer un composant factice qui prend toutes les mêmes entrées.
Parce que le composant simulé a ses propres tests unitaires, peu nous importe que les tests unitaires sur le composant parent ne testent pas l'enfant en même temps.
C'est ce qui m'a arrangé:
J'ai recherché dans l'ensemble du projet des occurrences de HttpClientModule
dans tous les fichiers *.spec.ts
. Il s'est avéré que j'en avais quelques-uns!
Ensuite, j'ai remplacé toutes les occurrences de
import { HttpClientModule } from '@angular/common/http';
avec
import { HttpClientTestingModule } from '@angular/common/http/testing';
Et puis je me suis assuré que l'entrée dans le tableau imports
de chacun des TestBed.configureTestingModule
De mon test était passée de HttpClientModule
à HttpClientTestingModule
.
Et finalement j'ai éteint mon Wifi et relancé les tests. Et voilà: ça marche!
Dans mon cas, le problème était qu'un test de composant, avec des composants enfants qui effectuent un appel http dans leur méthode ngOnInit, n'avait pas le HttpClientTestingModule importé. Si vous exécutez les tests et ouvrez les devtools sur la page réseau, vous pouvez vérifier si des appels http sont effectués pendant les tests. Une fois le module importé, aucun appel http n'a été effectué pendant les tests.
Il y a une autre façon dont vous pouvez également avoir cette erreur:
Pour moi, c'est que j'ai oublié d'appeler
beforeEach(() => {
TestBed.configureTestingModule({
});
});
Je suppose que si ce n'est pas appelé, il obtient le NgModule de l'AppModule et essaie donc d'importer tous les modules qui provoquent ce problème