如何新建一个“需要”应用程序的控制器?

时间:2014-10-24 02:51:33

标签: ember.js ember-testing

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

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()
});

“new up”无效,QUnit / ember会抛出错误

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

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

1 个答案:

答案 0 :(得分: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,您可以使用容器来获取控制器(Initialized dependency not present when testing)。这是一个帮手:

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