我用Ember CLI进行了第一次验收测试。我使用Ember Mirage来模拟服务器。
test('create file', function(assert){
visit('/login');
fillIn('input[name=username]', 'Joe');
fillIn('input[name=password]', 'foo');
click('button');
andThen(function() {
visit('/projects/files');
});
andThen(function(){
assert.ok(true);
})
});
测试成功运行,但它挂起,我收到以下错误
未捕获(承诺)错误:在测试上下文之外调用stop()
at Object.stop(http://localhost:4200/assets/test-support.js:2469:10) 在Class.asyncStart(http://localhost:4200/assets/vendor.js:49507:13) at asyncStart(http://localhost:4200/assets/vendor.js:41446:44)at Object.async(http://localhost:4200/assets/vendor.js:41460:7)at 履行(http://localhost:4200/assets/vendor.js:61624:26)at handleMaybeThenable(http://localhost:4200/assets/vendor.js:61584:9) 在决心(http://localhost:4200/assets/vendor.js:61597:7)密封 (http://localhost:4200/assets/vendor.js:61536:11)
Ajax服务
我使用ajax服务,它调用自定义api端点。如您所见,它使用标准的JSONAPISerializer。可能还是个问题?这是一个现有的应用程序,没有简单的方法来关闭此服务,没有它进行测试。
export default Ember.Service.extend({
// http://stackoverflow.com/questions/9705773/non-crud-actions-with-ember-data
call: function(method, type, id, action, hash = null){
var owner = Ember.getOwner(this);
var adapter = owner.lookup('adapter:application');
var url = adapter.buildURL(type, id) + '/' + action;
if (hash) {
hash.data = $.extend({}, hash);
}
return adapter.ajax(url, method, hash);
}
});
编辑1
我稍微更改了测试+打开了 ENV.APP.LOG_TRANSITIONS_INTERNAL 和 ENV.APP.LOG_TRANSITIONS 以查看更好的内容:
$.Velocity.mock = true
var done = assert.async();
visit('/login');
fillIn('input[name=username]', 'Joe');
fillIn('input[name=password]', 'foo');
click('button');
andThen(function() {
visit('/projects/files/new/overview');
setTimeout(function() {
assert.equal( find('.btn-primary').length, 2,"button was found" );
done();
}, 20000);
});
看起来登录工作正常,然后
Transition#2:projects.files.new.overview.index:调用deserialize hook ember.debug.js:51061 Transition#2: projects.files.new.overview.index:调用afterModel钩子 ember.debug.js:51061转换#2:解决了目标上的所有模型 路线;完成过渡。 ember.debug.js:6520生成 - > controller:projects对象{fullName:" controller:projects"}
告诉我,过渡没问题,我可以在qunit的容器中看到新页面。
有时我也会收到
未捕获错误:断言失败:您已打开测试模式, 它禁用了运行循环的自动运行。您需要包装任何代码 在运行中具有异步副作用