У меня ESA работает хорошо с Эмбер 2.0.1, но наткнулся на интересный случай, в то время тестирования:Ember Простой тестирование Auth window.location.reload
Учитывая следующий тест:
import Ember from 'ember';
import { module, test } from 'qunit';
import startApp from 'notifier/tests/helpers/start-app';
import Pretender from 'pretender';
import { authenticateSession } from '../../helpers/ember-simple-auth';
let server;
let application;
module('Acceptance | signout', {
beforeEach: function() {
application = startApp();
},
afterEach: function() {
Ember.run(application, 'destroy');
server.shutdown();
}
});
test('successfully sign out and get redirected', function(assert) {
server = new Pretender(function() {
this.post('/oauth/revoke', function() {
return [200, {"Content-Type": "application/json"}];
});
});
authenticateSession(application);
visit('/admin');
click('#sign-out');
andThen(() => {
assert.equal(currentRouteName(), 'users.sign-in');
});
});
результат теста - маршрут никогда не меняется. Он остается на /admin
. Это происходит только при тестировании, оно отлично работает, если я вручную взаимодействую с приложением.
Причина, по которой эта страница никогда не перезагружается (window.location.reload()
) после того, как сеанс недействителен согласно https://github.com/simplabs/ember-simple-auth/blob/jj-abrams/addon/mixins/application-route-mixin.js#L99-L101.
Поэтому beforeModel hook в AuthenticatedRouteMixin
никогда не срабатывает, поэтому тест никогда не перенаправляет из /admin
в /users/sign-in
.
Я получаю, что это происходит, потому что вы не можете запустить window.location.reload()
при тестировании, но я не уверен, какую альтернативу использовать. Я мог бы переопределить sessionInvalidated()
в своем маршруте приложения и просто перенаправить приложение на /users/sign-in
при тестировании, но это уже не проверка приложения.
Любые предложения?