1

I've got ESA working nicely with Ember 2.0.1 but stumbled on an interesting case whilst testing:

Given the following test:

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

The test result is the route never changes. It remains on /admin. This only occurs in testing, it works fine if I manually interact with the app.

The reason this happens is the page never gets reloaded (window.location.reload()) after the session gets invalidated as per https://github.com/simplabs/ember-simple-auth/blob/jj-abrams/addon/mixins/application-route-mixin.js#L99-L101.

Therefore the beforeModel hook in AuthenticatedRouteMixin never get triggered so the test never redirects out of /admin to /users/sign-in.

I get that this happens because you can't run window.location.reload() in testing but I'm not sure what alternative to use. I could override sessionInvalidated() in my application route and just have the app redirect to /users/sign-in when testing but that's no longer actually testing the app I suppose.

Any suggestions?

EasyCo
  • 2,036
  • 20
  • 39

1 Answers1

5

You cannot actually reload the location in testing mode as that would restart the test suite, thus leading to an infinite loop. You could maybe stub it with sinon and assert that the stub gets called.

marcoow
  • 4,062
  • 1
  • 14
  • 21