我使用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