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

时间:2015-02-03 15:28:00

标签: testing ember.js

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

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

但是,在测试组件时,我收到一条错误消息,指出在尝试访问其任何属性/方法时服务未定义。

在测试中,我将服务置于“需求”中,如下所示:

needs: ['service:my-service']

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

是否还需要执行其他步骤?

运行ember-cli 0.1.12。

3 个答案:

答案 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']让一个人工作。