1

我将 karma 与 qUnit 一起使用(在遵循本教程之后)来测试我的 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 测试工具中的一个错误?

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

4

1 回答 1

1

错误的最后一部分是如何解决此问题的关键。您必须确保任何进行异步调用的代码都包含在 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代码,则更容易给出更具体的答案。

于 2013-09-13T13:29:36.617 回答