Ember - Retorna uma promessa de beforeModel não funciona com Qunit

No meuApplicationRoute Eu implementar umbeforeModel gancho que faz uma chamada de servidor para ver se existe uma sessão válida. Em caso afirmativo, o aplicativo navega para a rota "dashboard", caso contrário, ele vai para a rota "login". Eu estou tentando implementar alguns testes e não consigo fazê-lo funcionar com o QUnit. Eu continuo recebendo:

Assertion failed: Você ativou o modo de teste, o que desativou a execução automática do loop de execução. Você precisará agrupar qualquer código com efeitos colaterais assíncronos em um Ember.run

Aqui é um plunkerhttp://plnkr.co/edit/e0Q4qz?p=preview Eu simulei uma chamada de servidor criando umdoLater método que retorna uma promessa e executa um método em alguns milissegundos. A única maneira de fazer isso funcionar é não retornar uma promessa dobeforeModel gancho. Estou usandoApp.deferReadiness() eEmber.run() corretamente?

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");
    });
  });
}

questionAnswers(1)

yourAnswerToTheQuestion