ember.js – 测试时不存在初始化依赖项

我正在使用ember-cli 0.0.35,并通过初始化程序向我的组件注入依赖项.它在开发中很有用,但是当我运行测试时,属性不存在.看来测试调用loadInitializers,但是依赖性没有显示在this.subject({})上;

我不想手动为测试注入它.有没有更好的方法来处理这个?

初始化:

var FooServiceInitializer = {
  name: 'foo',
  initialize: function (container, application) {
   application.inject('component:foo', 'foo', 'service:foo');
  }
};
export default FooServiceInitializer;

失败测试:

moduleForComponent('bar', 'Component: Bar', {
  setup: function() {
    App = startApp();
    component = this.subject({});
  },
  teardown: function () {
    Ember.run(App, App.destroy);
  }
});

test('Properties: foo', function() {
  // Make sure we injected the service
  ok(component.foo, 'foo is injected');
});

最佳答案 正如我之前所说,它实际上适用于集成测试,因为此时您正在测试容器(而不是ic-ajax创建的迷你容器).

你真正的考验就是这样

test("root lists 3 colors", function(){
  var c = App.__container__.lookup('component:foo-bar');
  ok(c.foo.blah);
});

如果您在测试过程中使用容器感到内疚(您不应该这样做),那么您可以创建一个帮助程序,以避免在将来/如果api发生变化时必须在整个地方修复它.

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

确保您之前定义它

App.injectTestHelpers();

然后你的测试看起来像

test("root lists 3 colors", function(){
  var c = containerLookup('component:foo-bar');
  ok(c.foo.blah);
});

http://emberjs.jsbin.com/doxigu/edit

点赞