Ember.js:在集成测试中获得控制器的最佳方式

时间:2014-06-04 08:55:28

标签: ember.js

我有一些通常看起来像这样的集成测试:

test('can load with available teams', function () {
    visit('/workforce/admin/organizations/create').then(function () {
        var controller = App.__container__.lookup('controller:organizations.create');
        ...
    });
});

App .__容器中的下划线表示(至少对我而言),这是一个私有财产,不应在外部访问。

有没有更好的方法/模式来实现这一目标?

2 个答案:

答案 0 :(得分:7)

在测试期间,这是最好的方法,您可以创建一个测试帮助程序,以避免在将来发生更改时必须在多个位置修复它。

// register custom helper
Ember.Test.registerHelper('getController',  
  function(app, controllerName) {
    return app.__container__.lookup('controller:' + controllerName);
  }
);


test('dblClick link increments count', function() {
  expect(2);
  visit('/').then(function(){
    var c = getController('index');
    ok(c.get('good'));
    ok(!c.get('bad'));
  });
});

http://jsbin.com/jesuyeri/14/edit

答案 1 :(得分:1)

使用@ Kingpin2k的答案时,您也可以利用ES6:

Ember.Test.registerHelper('getController',
  (app, controllerName) => app.__container__.lookup('controller:' + controllerName)
);