javascript - Ember.js 组件集成测试 : How to work with global injections and nested components?

标签 javascript ember.js dependency-injection ember-testing ember-components

场景:我想使用真实服务 my-service 集成测试组件 A。我有一个将服务全局注入(inject)所有组件的初始化程序:application.inject('component', 'myService', 'service:my-service');。组件 A 在其模板中使用组件 B,并且它们都在其模板中使用 myService

如何重新创建全局注入(inject)?没有完整的应用程序,所以我无法导入和运行真正的初始化程序,因为我没有所需的参数。 this.inject.service 不起作用,因为它将它注入(inject)测试上下文,而不是全局应用程序上下文。

我可以更改所有组件的模板以将服务一直向下链接:{{b-component myService=myService}},然后

this.render(hbs`{{a-component myService=myService}}`);

但这是最后的手段。我也可以摆脱全局注入(inject)并手动注入(inject)每个组件。这也是不得已的办法。

我已经追踪到关于这个问题的讨论 https://github.com/emberjs/ember.js/issues/12277 .它几乎已实现,但随后因支持大测试统一而关闭 https://github.com/emberjs/rfcs/pull/119 .等待大考统一,现在有什么解决办法吗?

最佳答案

来自 https://stackoverflow.com/users/1157494/robert-jackson 的提示,我找到了丢失的部分。您可以在测试上下文中查找所有者,这是您需要提供给初始化程序的缺失参数:

import { initialize } from 'my-app/initializers/my-initializer';

// ...

beforeEach() {
  initialize(Ember.getOwner(this));
}

现在您的所有组件都具有所需的全局注入(inject)!

关于javascript - Ember.js 组件集成测试 : How to work with global injections and nested components?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41575069/

相关文章:

ember.js - Ember 数据验证的标准模式是什么? (无效状态,变成无效...)

c# - 与生产者基于注解的 DI

javascript - 无意中关闭了生成 JavaScript 的 PHP 函数中的 </script> 标签(本身通过 JavaScript 调用)

javascript - 当值太大时,IE11 不会触发本地存储事件

javascript - 如何正确拆分 Controller 的模型?

go - 使用 facebookgo 创建多个实例

java - 如何在构造函数接受类的情况下使用 Guice `Module` 进行注入(inject)?

php - 如何使用 javascript 创建一个简单的按钮来调用 zend 框架中的 zend 操作?

c# - 如何从asp.net中的javascript调用服务器端代码?

带有标签模式的 Ember.js 页面