我正在尝试编写一个简单的Ember集成测试,并继续使用Ember.run
来获得令人沮丧的运行循环错误。我有一个噩梦,试图让这个工作,如果有人可以帮助我,我会非常感激。具体来说,我可以看到测试登录并开始加载下一页(应该如此),但是一旦测试完成,我就会收到该错误。这是关于第二次测试,第一次测试(因为我认为没有任何异步)。
import Ember from 'ember';
import startApp from 'jobs-tuftsdaily/tests/helpers/start-app';
import exists from 'jobs-tuftsdaily/tests/helpers/start-app';
var App;
module('Integration - Landing Page', {
setup: function() {
App = startApp();
},
teardown: function() {
Ember.run(App, 'destroy');
}
});
test('Should load content', function() {
visit('/').then(function() {
ok(exists("*"), "Found HTML!");
ok(exists('label:eq(4)'), "Slug label on page");
});
});
test('Should sign in test user', function() {
Ember.run(function() {
visit('/').andThen(function() {
return fillIn("input[name=email]", "test@test.com");
}).andThen(function() {
return fillIn("input[type=password]", "password");
}).andThen(function() {
return click("button");
}).andThen(function() {
ok(1, "stupid test passed");
});
});
});
答案 0 :(得分:4)
我意识到我迟到了,但无论如何都要去了:
在组件或应用程序代码中的某个地方(也就是说,不在测试代码中),您可能会听到Ember之外的某些事件(例如,DOM事件,通过jQuery或类似的东西),但尝试与之交互它在那个处理程序运行期间。这些处理函数必须包含在Ember.run.bind()
中,否则在测试期间不会有runloop。 Ember.run.bind()
还会在处理程序中为您设置this
。
如果你没有在Ember.run.bind()
中包装你的事件回调,那么在正常运行应用程序期间,代码可能仍会毫无困难地运行,因为自动运行功能会发现要求运行环境(例如,如果你安排在处理程序中使用Ember.run.schedule()
的东西与代码中的Ember交互并为它们启动runloop,但它在测试中关闭了。
答案 1 :(得分:2)
我在组件的集成测试中遇到了同样的问题。错误是:
断言失败:您已打开测试模式,禁用了 run-loop的自动运行。
您需要在运行中包装任何带有异步副作用的代码。
我找到了集成测试问题的原因。我使用以下代码渲染组件:
let myobject = Ember.Object.create({x:1});
this.set('param', myobject)
this.render(hbs`{{my-object param=param}}`);
渲染后,如下所示更新myobject
会导致错误。:
myobject.set('x',2);
因为它不在ember运行循环中。
而不是这个错误的调用,更新值应该作为以下之一完成:
this.set('param.x',2);
//OR:
this.set('param', Ember.Object.create({x:1});
//OR:
Ember.run(()=>{
Ember.set(myobject,'x',2);
});
对于您的情况:我没有尝试但我的意见是,异步测试助手,如 visit,click,fillIn 可用于验证测试,而不是在集成测试中,因为以下原因。
答案 2 :(得分:1)
在Ember.run
中包含您的测试不会有任何帮助,因为测试代码而不是您的应用程序代码,因为您没有收到错误。在您的登录路线中,您必须执行一些异步请求(例如AJAX或setTimeout
偶数),并在其处理程序中执行一些Ember API执行(如设置,转换,任何事情)。
如果您需要任何确切的帮助,您需要在路线/控制器中发布您的代码。
我最近发布了一个关于Run Loop的电子书,包括可以downloaded here的自动运行机制。