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