Ember - Zwróć obietnicę z poprzedniej wersjiModel nie działa z Qunit

W moimApplicationRoute WdrażambeforeModel hook, który wykonuje wywołanie serwera, aby sprawdzić, czy istnieje ważna sesja. Jeśli tak, aplikacja przechodzi do trasy „deski rozdzielczej”, w przeciwnym razie przechodzi do trasy „logowania”. Próbuję zaimplementować niektóre testy i nie mogę sprawić, aby działało ono z QUnit. Ciągle otrzymuję:

Asercja nie powiodła się: włączyłeś tryb testowania, który wyłączył automatyczne uruchamianie pętli uruchomieniowej. Będziesz musiał owinąć dowolny kod asynchronicznymi efektami ubocznymi w Ember.run

Oto pogromcahttp://plnkr.co/edit/e0Q4qz?p=preview Symulowałem wywołanie serwera, tworzącdoLater metoda, która zwraca obietnicę i wykonuje metodę w ciągu kilku milisekund. Jedynym sposobem, w jaki mogę go uruchomić, jest nie zwracanie obietnicy odbeforeModel hak. Czy używamApp.deferReadiness() iEmber.run() poprawnie?

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