0

在添加我的“需求”之前,控制器看起来像这样

var MyController = Ember.ArrayController.extend({
    wat: function() {
        return true;
    }.property()
});

这让我可以像这样编写非常简单的单元测试

test('wat always returns true ... huh', function() {
    var controller = new MyController();
    var wat = controller.get('wat');
    ok(wat);
});

但是在我像这样添加了一个“需要”块之后......

var MyController = Ember.ArrayController.extend({
    needs: 'application',
    wat: function() {
        return true;
    }.property()
});

“新的”不起作用,QUnit / ember 会抛出这样的错误

“请确保此控制器已使用容器实例化”

不用说“拉入/使用 ember-qunit”,我在这里还有哪些其他选择?我可以简单地猛击“存根”来满足容器要求吗?

4

1 回答 1

1

使用 ember-qunit(我不是它的最大粉丝),您可以使用this.subject()并设置模块来获取控制器,如下所示:

moduleFor('controller:comments', 'Comments Controller', {
  needs: ['controller:post']
});

http://emberjs.com/guides/testing/testing-controllers/#toc_testing-controller-needs

如果您没有使用 Ember Qunit,您可以只使用容器来获取控制器(测试时不存在已初始化的依赖项)。这是一个帮手:

Ember.Test.registerHelper('containerLookup',
  function(app, look) {
    return app.__container__.lookup(look);
  }
);

您可以像这样轻松使用它:

test("root lists 3 colors", function(){
  var c = containerLookup('controller:foo');

  ok(c.get('controllers.bar.tr'));
  ok(!c.get('controllers.bar.fa'));
});

示例:http ://emberjs.jsbin.com/tumeko/edit

于 2014-10-24T03:00:51.367 回答