web-dev-qa-db-fra.com

Echec: délai d'attente après la fin des tâches angulaires asynchrones après 11 secondes

Je voudrais tester de bout en bout notre application angulaire 2 en utilisant Protractor, mais je suis coincé avec le message:

"Failed: Timed out waiting for asynchronous Angular tasks to finish after 11 seconds."

Mon fichier de conf.

exports.config = {
  directConnect: true,
  specs: ['spec.js'],

  // For angular2 tests
  useAllAngular2AppRoots: true,
}

Chrome est ouvert et le site Web est également ouvert. Ensuite, rien ne se passe avant l'expiration du délai.

Lorsque vous désactivez la synchronisation (à l'aide de browser.ignoreSynchronization = true;), c'est OK. Mais je perds la fonctionnalité "attente automatique", l'un des principaux avantages de l'utilisation de Protractor.

L'application est entièrement basée sur angular 2. Alors pourquoi cela ne fonctionne pas?

Nos développeurs m'ont dit que nous n'interrogions pas (une des causes possibles selon la documentation du rapporteur ). Au fait, nous utilisons l’architecture websocket. Je ne sais pas s'il y a un lien.

En fait, je ne sais pas comment résoudre ce problème.

Quelqu'un pourrait aider, s'il vous plaît?

17
Tibeben

Votre proposition est juste. Cette erreur se produit lorsque des tâches en attente sont en cours d'exécution dans votre application angular2.

Oui, la raison la plus courante est lorsque l'application interroge continuellement $ timeout ou $ http, Protractor attend indéfiniment et expire. Mais cela peut aussi se produire dans des scénarios où App prend plus de 11 secondes.

S'il vous plaît se référer ici pour plus d'informations sur différents délais

la valeur de délai d'attente par défaut est de 11 secondes. Vous pouvez changer cela en ajustant la valeur ci-dessous dans config.js et en essayant de voir si le problème persiste.

  /**
   * The timeout in milliseconds for each script run on the browser. This
   * should be longer than the maximum time your application needs to
   * stabilize between tasks.
   */
  allScriptsTimeout?: number;
6
AdityaReddy

Activer temporairement browser.ignoreSynchronization le corrige, comme indiqué dans une réponse ici

browser.ignoreSynchronization = true;

(code qui lève l'erreur)

browser.ignoreSynchronization = false;
5
emery

Modifiez le scénario de test et mettez browser.waitForAngularEnabled(false); après le premier clic, devrait fonctionner. 

Cependant, la méthode recommandée peut remplacer le délai d’expiration par défaut dans votre fichier conf.js par allScriptsTimeout: 110000.

2
Saikat