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

Ember.js testing component with service dependency

我正在尝试为我的插件编写测试,但遇到了一些奇怪的行为。

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

但是,在测试该组件时,我收到一条错误消息,指出在尝试访问其任何 properties/methods.

时服务未定义

在测试中,我将服务置于 "needs" 中,如下所示:

needs: ['service:my-service']

"Needing" 其他组件(例如内部使用的子组件)按预期工作,服务异常失败。

是否需要执行任何其他步骤?

运行ember-cli 0.1.12。

当您生成服务时,它还会生成一个初始化程序,其工作是将服务注入到您需要它的各个地方。

因此,当您 运行 acceptance 测试时,您的应用程序将启动并且初始化程序将 运行,因此服务将可用。

但是,当 unit 测试组件时,您会得到一个干净的容器(更适合测试)。你只需要注入你需要的东西:

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

我设法通过使用最新的 Ember.inject API 可用的新 Ember.inject API 1.10 release.

显然新的注入 API 是为了在未来取代 needs,它也适用于单元测试。

我们刚刚设法让一个使用 needs: ['service:myService'] 而不是 needs: ['service:my-service'] 工作。