Testing 具有服务依赖性的Ember.js测试组件

Testing 具有服务依赖性的Ember.js测试组件,testing,ember.js,Testing,Ember.js,我试图为我的插件编写测试,但遇到了一些奇怪的行为 我已经创建了一个服务(通过ember cli generate),该服务在组件内部使用。 当一个实际的应用程序运行时,一切正常 但是,在测试组件时,我得到一个错误,表示在尝试访问其任何属性/方法时服务未定义 在测试中,我将服务设置为“需要”,如下所示: 需要:[“服务:我的服务”] “需要”其他组件(例如内部使用的子组件)按预期工作,服务会奇怪地失败 是否需要执行其他步骤 正在运行ember cli 0.1.12 当您生成服务时,它还会生成一个初

我试图为我的插件编写测试,但遇到了一些奇怪的行为

我已经创建了一个服务(通过ember cli generate),该服务在组件内部使用。 当一个实际的应用程序运行时,一切正常

但是,在测试组件时,我得到一个错误,表示在尝试访问其任何属性/方法时服务未定义

在测试中,我将服务设置为“需要”,如下所示:

需要:[“服务:我的服务”]

“需要”其他组件(例如内部使用的子组件)按预期工作,服务会奇怪地失败

是否需要执行其他步骤


正在运行ember cli 0.1.12

当您生成服务时,它还会生成一个初始值设定项,其任务是将服务注入到您需要它的各个地方

因此,当您运行验收测试时,您的应用程序将已启动,并且初始值设定项已运行,因此服务将可用

然而,当单元测试组件时,您会得到一个干净的容器(更适合测试)。您只需注入所需的内容:

moduleForComponent('foo-bar', null, {
  setup: function(container) {
    container.register('service:foo', FooService);
    container.injection('component', 'fooService', 'service:foo');
  }
});

我通过使用最新的
Ember.inject
API(在撰写本文时)成功地实现了这一点


显然,新的InjectAPI是为了在将来取代
需求
,它在单元测试中也非常有效。

我们只是设法使用
需求:['service:myService']
而不是
需求:['service:my service']
来实现一个

当我运行
App=startApp()时我可以看到初始化器中的控制台日志,初始化器正在将服务注入组件中。我不知道这是否意味着它是正确的注射。我尝试了你的方法,但是我得到了
FooService是未定义的
,用引号括起来,但是
未能创建“service:foo”的实例。
如果你感兴趣,我有一个复制我的问题的最小设置。Andrew的解决方案对我有效(我不在Ember 1.10上,所以不能使用
Ember.inject
)@rk1:您需要在测试文件的顶部导入服务。类似于从'../../../services/foo'导入FooService的
import。这就是为什么会出现
FooService is undefined
错误。它应该是这样的:
export default Ember.Component.extend({cart:Ember.inject.service('shopping-cart')})如此处文档所示(访问服务)-