测试时不存在初始化的依赖项



我使用ember-cli 0.0.35,并通过初始化器向我的组件注入依赖项。它在开发中工作得很好,但当我运行测试时,该属性不存在。似乎测试调用loadinitializer,但依赖关系没有显示在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

相关内容

  • 没有找到相关文章

最新更新