我正在尝试为我的插件编写测试,但遇到了一些奇怪的行为。
我创建了一个服务(通过ember-cli generate),它在组件内部使用。 当一个实际的应用程序运行时,一切正常。
但是,在测试组件时,我收到一条错误消息,指出在尝试访问其任何属性/方法时服务未定义。
在测试中,我将服务置于“需求”中,如下所示:
needs: ['service:my-service']
“需要”其他组件(例如内部使用的子组件)按预期工作,服务奇怪地失败。
是否还需要执行其他步骤?
运行ember-cli 0.1.12。
答案 0 :(得分:1)
当您生成服务时,它还会生成一个初始化程序,其作用是将服务注入您需要的各个位置。
因此,当您运行接受测试时,您的应用程序将已启动并且初始化程序已经运行,因此服务将可用。
但是,当 unit 测试组件时,您将获得一个干净的容器(更适合测试)。你只需要注入你需要的东西:
moduleForComponent('foo-bar', null, {
setup: function(container) {
container.register('service:foo', FooService);
container.injection('component', 'fooService', 'service:foo');
}
});
答案 1 :(得分:0)
我设法通过使用最新的Ember.inject
API(截至撰写时)1.10 release来完成此工作。
显然,新的注入API将在未来取代needs
,它也适用于单元测试。
答案 2 :(得分:0)
我们设法使用needs: ['service:myService']
而不是needs: ['service:my-service']
让一个人工作。