我正在使用qUnit的karma(在跟随this tutorial之后)来测试我的Ember应用程序。它总体上进展顺利,但是我遇到了一个没有意义的问题。
鉴于以下2项测试:
test('can get to products', function() {
visit('/products/')
.then(function() {
ok(find('*'));
});
});
test('can get to catalogues', function() {
visit('/products/catalogues')
.then(function() {
ok(find('*'));
});
});
第一次运行正常。测试运行器到达/products
并找到了一些东西。
但是,第二个测试在控制台中返回错误:
Error: Assertion Failed: You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in an Ember.run
我启用了转换日志,测试运行者在抛出错误之前正在访问products.catalogues.index
。
有这个想法吗?或者它只是ember测试工具中的一个错误?
两者都是在路由器内定义的有效路由......
答案 0 :(得分:0)
错误的最后一部分是如何解决此问题的关键。您必须确保任何进行异步调用的代码都包含在Ember.run中。这包括像create和set方法一样简单的事情。
如果您有类似
的内容App.ProductsRoute = Ember.Route.extend({
model: function() {
return [
Ember.Object.create({title: "product1"}),
Ember.Object.create({title: "product2"})
]
}
});
将其重构为
App.ProductsRoute = Ember.Route.extend({
model: function() {
return [
Ember.run( Ember.Object, "create", {title: "product1"} ),
Ember.run( Ember.Object, "create", {title: "product2"} )
]
}
});
或强>
App.ProductsRoute = Ember.Route.extend({
model: function() {
return Ember.run(function() {
return [
Ember.Object.create({title: "product1"}),
Ember.Object.create({title: "product2"})
]
});
}
});
如果您发布了 / products 代码,则可以更轻松地提供更具体的答案。