我只是想写一些测试来确保登录和注销工作,包括与之相关的一切
测试/集成/会话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.");
});
});
});
这里有一个精简版的后台登录逻辑:
应用程序/控制器/登录.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编写的。
想明白了。显然,这是一个身份验证错误,您无法通过错误消息猜到这一点。
在登录控制器中,有一行是我设置应用程序控制器的令牌属性的地方。应用程序控制器有一个观察者来观察该属性的更改,然后在更改时设置AJAX头。问题是,观察到使用Ember的运行循环,该循环在测试时被禁用。
为了解决这个问题,我在登录控制器中设置了AJAX头,就在转换到欢迎路由之前。