4

我正在使用 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');
});
4

1 回答 1

2

正如我之前所说,它确实适用于集成测试,因为此时您正在测试容器(而不是由 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

于 2014-06-23T19:39:09.663 回答