2015-10-29 2 views
3

Lorsque j'utilise l'adaptateur Emberfire (Firebase), j'obtiens diverses erreurs qui indiquent que les tests n'attendent pas la fin des opérations de données.Ember.js Test d'acceptation n'attendant pas les opérations de données asynchrones

par exemple: Error: Assertion Failed: You can only unload a record which is not inFlight. lorsque je tente de créer, vérifier, puis supprimer un enregistrement

aussi:

FIREBASE WARNING: Exception was thrown by user callback. Error: Called stop() outside of a test context at Object.extend.stop (http://localhost:4200/assets/test-support.js:3000:10) at exports.default._emberTestingAdaptersAdapter.default.extend.asyncStart

Ces erreurs ne se produisent pas lors de la navigation manuellement via mon application, ni lors de l'utilisation l'adaptateur de données de braises standard.

Qu'est-ce qui cause ces erreurs et comment les éviter?

Editer: bien que les symptômes soient un peu différents (pas d'erreur levée), il semble que this problem ait la même cause que les erreurs que j'ai vues.

Répondre

3

tl; dr

Pour contourner le problème, je me sers d'un custom test waiter. Vous pouvez l'installer avec ember install ember-cli-test-model-waiter (fonctionne avec Ember v2.0 +)

réponse plus longue:

La cause première de ces problèmes est que le système de test des braises ne sait pas comment gérer l'asynchronicité de Firebase. Avec la plupart des adaptateurs, ce n'est pas un problème, car le système de test instruments AJAX calls et ensures they have completed before proceeding, mais cela ne fonctionne pas avec la communication websockets de Firebase.

Donc, bien que ces erreurs ne se produisent pas lors de l'interaction manuelle, je crois qu'ils pourraient techniquement s'il était possible de cliquer assez vite.

Ces problèmes sont known to occur with ember-pouch et se produiront probablement aussi avec d'autres adaptateurs non-AJAX (par exemple. Adaptateurs localStorage (1, 2), ou tout autre adaptateur à base websockets. Il peut se produire avec l'adaptateur de fixation, mais peut revenir résultats immédiatement et donc ne pas déclencher ce problème). Il arrive aussi avec d'autres processus asynchrones, comme liquid-fire animations (fixed in a similar way)

Les travaux custom test waiter I mentioned in the tl;dr en attendant tous les modèles pour résoudre avant de procéder à l'essai, et doivent donc travailler avec tous ces adaptateurs non-AJAX. Pour plus de détails sur la façon dont les tests de braise traitent l'asynchronisme sous le capot, Cory Forsyth has a helpful blog post et this gist donne une autre approche de solution plus flexible, mais qui nécessite plus de tenue de livres manuelle.