使用Ember CLI集成测试会话

时间:2014-09-25 19:24:49

标签: ember.js qunit ember-cli ember-qunit

我只是想编写一些测试来确保登录和退出工作,包括随之而来的一切。以下是我到目前为止所做的事情:

测试/集成/会话-test.js

import Ember from "ember";
import { test } from 'ember-qunit';
import startApp from '../helpers/start-app';
var App;

module('Integrations: Sessions', {
  setup: function() {
    App = startApp();
  },
  teardown: function() {
    Ember.run(App, App.destroy);
  }
});

test('Unsuccessful Sign In', function() {
  expect(3);
  visit('/sign-in');
  andThen(function() {
    fillIn('input#email', 'test@user.com');
    fillIn('input#password', 'bad_password');
    click('input#submit');
    andThen(function() {
      equal(currentRouteName(), 'sign-in', 'Unsuccessfull sign in stays on the sign in page.');
      ok($('input#email, input#password').hasClass('error'), 'Inputs have a class of "error."');
      equal($('input#submit').prop('disabled'), false, 'Submit button is not disabled.');
    });
  });
});

test('Successful Sign In', function() {
  expect(2);
  visit('/sign-in');
  andThen(function() {
    fillIn('input#email', 'test@user.com');
    fillIn('input#password', 'password');
    click('input#submit');
    andThen(function() {
      equal(currentRouteName(), 'welcome', 'Successfull sign in redirects to welcome route.');
      ok(find('.message').length, "Page contains a list of messages.");
    });
  });
});

而且,这是幕后逻辑登记的精简版本:

应用/控制器/签in.js

import Ember from 'ember';
export default Ember.Controller.extend({
  needs: ['application'],

  actions: {
    signIn: function() {
      var self = this;
      var data = this.getProperties('email', 'password');

      // Attempt to sign in and handle the response.
      var promise = Ember.$.post('/v3/sessions', data);
      promise.done(function(response) {
        Ember.run(function() {
          self.get('controllers.application').set('token', response.access_token);
          self.transitionToRoute('welcome');
        });
      });

      ...
    }
  }
});

“不成功登录”测试工作正常。 “成功登录”开始工作,然后中途退出。它登录,然后正确重定向。在欢迎页面上,当它调用以获取消息时,节点服务器正在响应Error: Not enough or too many segments和500状态。假设我对API没有任何控制权,这对世界来说意味着什么以及如何解决?

此外,据我所知,API主要是使用Koa和Passport编写的。

1 个答案:

答案 0 :(得分:0)

想出来。显然,这是一个身份验证错误,而不是您可以通过错误消息猜测。

在登录控制器中,有一行我正在设置应用程序控制器的令牌属性。应用程序控制器有一个观察者观察该属性的变化,然后在更改时设置AJAX标头。问题是,观察使用Ember的运行循环,它在测试时被禁用。

要解决此问题,我在转换到欢迎路径之前,在登录控制器中设置了AJAX标题。