测试ember嵌套路由失败

时间:2013-09-13 10:52:38

标签: testing ember.js qunit karma-runner

我正在使用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测试工具中的一个错误?

两者都是在路由器内定义的有效路由......

1 个答案:

答案 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 代码,则可以更轻松地提供更具体的答案。