ember.js qunit

ember.js - Ember: devuelve una promesa de beforeModel que no funciona con Qunit



(1)

En mi ApplicationRoute implemento un hook beforeModel que hace una llamada al servidor para ver si existe una sesión válida. Si lo hace, la aplicación navega hacia la ruta ''tablero'', de lo contrario pasa a la ruta de ''inicio de sesión''. Estoy tratando de implementar algunas pruebas y parece que no puedo hacer que funcione con QUnit. Sigo recibiendo:

Error de aserción: ha activado el modo de prueba, que deshabilitó la ejecución automática del ciclo de ejecución. Tendrá que ajustar cualquier código con efectos secundarios asíncronos en un Ember.run

Aquí hay un plunker http://plnkr.co/edit/e0Q4qz?p=preview He simulado una llamada al servidor creando un método doLater que devuelve una promesa y ejecuta un método en unos pocos milisegundos. La única forma en que puedo hacer que funcione es no devolver una promesa del hook beforeModel . ¿Estoy usando App.deferReadiness() y Ember.run() correctamente?

App = Ember.Application.create({}); App.Router.map(function() { this.resource(''dashboard''); this.resource(''login''); }); App.ApplicationRoute = Ember.Route.extend({ alreadyChecked: false, beforeModel: function() { var route = this; // uncomment this line to stop this hook returning a promise // return route.transitionTo(localStorage.user ? ''dashboard'' : ''login''); if (!this.alreadyChecked) { return doLater(function() { // without the alreadyChecked flag, this function gets called twice route.set(''alreadyChecked'', false); route.transitionTo(localStorage.user ? ''dashboard'' : ''login''); }); } } }); App.LoginRoute = Ember.Route.extend({ actions: { login: function() { var route = this; doLater(function() { localStorage.user = "Bill"; route.transitionTo(''dashboard''); }); } } }); App.DashboardRoute = Ember.Route.extend({ actions: { logout: function() { var route = this; doLater(function() { localStorage.user = ""; route.transitionTo(''login''); }); } } }); function doLater(fn) { return Ember.RSVP.Promise(function(resolve, reject) { setTimeout(function() { resolve(fn()); }, 500); }); } // run the tests if (true) { // toggle this boolean to run the app in testing mode App.rootElement = ''#ember-testing''; App.setupForTesting(); App.injectTestHelpers(); module(''integration tests'', { setup: function() { Ember.run(function() { App.reset(); localStorage.user = ""; App.deferReadiness(); }); } }); test(''can navigate to login page'', function() { expect(1); Ember.run(App, ''advanceReadiness''); visit("/login").then(function() { ok(true, "Tests work"); }); }); }