2015-09-14 4 views
1

У меня 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 при тестировании, но это уже не проверка приложения.

Любые предложения?

ответ

3

Вы не можете реально перезагрузить местоположение в режиме тестирования, так как это приведет к перезапуску набора тестов, что приведет к бесконечному циклу. Возможно, вы можете заглушить его синоном и утверждать, что заглушка вызвана.

Смежные вопросы