6
votes

Karma déconnecté, car aucun message dans 10000 ms

La suite de tests Karma échoue avec le message:

Déconnecté, car aucun message dans 10000 ms.

Aucun test n'est exécuté du tout.

"@angular/core": "7.1.3",
"jasmine-core": "3.3.0",
"karma-jasmine": "1.1.2",

Il n'y a pas de raison apparente pour l'échec, il a juste commencé après l'introduction d'un nouveau test. p>


0 commentaires

5 Réponses :


5
votes

Lorsque l'option du compilateur --module pour TypeScript dans tsconfig.spec.json est définie sur commonjs Karma échoue en interne avant tout test exécuté et affiche l'erreur de temporisation ci-dessus.

L'ordre d'importation peut laisser échouer Karma:

import {CustomerDto} from '../api/CustomerDto';
import CustomerTypeEnum = CustomerDto.CustomerTypeEnum;

Pendant que cet ordre fonctionne comme prévu:

import CustomerTypeEnum = CustomerDto.CustomerTypeEnum;
import {CustomerDto} from '../api/CustomerDto';


5 commentaires

Non, ce n'est pas du tout un bug. import CustomerTypeEnum = CustomerDto.CustomerTypeEnum; n'est pas du tout une importation. Il s'agit d'une syntaxe permettant d'aliaser un membre d'un espace de noms TypeScript. De tels espaces de noms peuvent exister à la fois dans l'espace des valeurs et dans l'espace des types. Puisque CustomerTypeEnum est une valeur ainsi qu'un type, une affectation de variable est émise par le compilateur avec un initialiseur référençant une propriété d'un objet qu'il n'est pas encore défini. Cela dépend dans une certaine mesure du format de votre module de sortie. Regardez le code compilé et vous verrez exactement ce qui se passe et pourquoi.


Le compilateur TypeScript devrait probablement signaler cela comme une erreur, mais il échouera uniquement dans certains formats de module.


Merci pour cette entrée, j'ai ajusté ma réponse en fonction de votre entrée. Je suis d'accord que le compilateur TypeScript devrait signaler cela comme une erreur ou au moins donner un avertissement.


Il n'est en fait pas lié à --moduleResolution ou --target mais à --module . Mais la différence possible basée sur ce drapeau est vraiment un problème secondaire. En fin de compte, ce que vous faites, c'est utiliser la valeur avant qu'elle ne soit disponible, et le compilateur devrait vous avertir, mais l'ordre qui fonctionne est aussi l'ordre logique - les importations doivent être lexiquement avant leur utilisation si pour aucune autre raison que la clarté.


La réponse a encore changé: en fait, changer --module de commonjs à es2015 a fonctionné dans ma base de code et est définitivement la meilleure solution.



-4
votes

Vous pouvez ajouter ceci là où vous avez besoin de plus de temps que l'heure par défaut de jasmin.

  beforeEach(async(() => {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = <whatever time your test need to complete>;
  }));

et vous pouvez également vérifier cette réponse si cela ne fonctionne pas. https://stackoverflow.com/a/37969873/1931563


3 commentaires

J'ai déjà essayé, cela n'a pas fonctionné dans mon cas. Il a échoué lors de l'initialisation du karma (voir ma réponse ci-dessous).


Oui, ce n'est certainement pas un problème de timing. Il m'a fallu une journée entière pour le comprendre car Karma n'a pas signalé le problème du compilateur. Le changement du module commonjs compilerOption en es2015 résout le problème.


Je ne pense pas que ce soit son problème DEFAULT_TIMEOUT_INTERVAL. Parce que parfois je vois même si mes cas de test n'ont même pas commencé à fonctionner et après juste le lanceur de karma, je vois un problème déconnecté.



6
votes

J'ai eu le même problème et j'ai tout essayé - rien ne fonctionne sauf l'ajout de cette option à mon karma.conf.js:

browserNoActivityTimeout: 400000


0 commentaires

0
votes

J'ai eu un problème similaire sur Chrome 85.0.4183. Je ne sais pas pourquoi Karma perd la connexion avec le navigateur et je reçois "Déconnecté, car aucun message depuis 30000 ms."

J'ai ajouté ceci à Karma.conf:

captureTimeout: 210000,
browserDisconnectTolerance: 3, 
browserDisconnectTimeout : 210000,
browserNoActivityTimeout : 210000

maintenant cela fonctionne, j'espère que cela vous aidera


0 commentaires

1
votes

Cela a échoué pour moi car je définissais window.location.href dans mon composant, mais le test s'est arrêté à des moments aléatoires plutôt que d'échouer dans le test de mon composant.


0 commentaires