1

Сценарий: Я хочу интегрировать тестовый компонент A, используя реальный сервис my-service. У меня есть инициализатор, который глобально вводит службу во все компоненты: application.inject('component', 'myService', 'service:my-service');. Компонент A использует компонент B в своем шаблоне, и оба они используют myService в своих шаблонах.Тест интеграции компонентов Ember.js: как работать с глобальными инъекциями и вложенными компонентами?

Как воссоздать глобальную инъекцию? Нет полного приложения, поэтому я не могу импортировать и запускать настоящий инициализатор, потому что у меня нет необходимого параметра. this.inject.service не работает, потому что он вводит его в тестовый контекст, а не в глобальный контекст приложения.

Я мог бы изменить шаблоны всех моих компоненты в цепи на службе весь путь вниз: {{b-component myService=myService}}, а затем

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

Но это в крайнем случае. Я мог бы также избавиться от глобальной инъекции и вводить вручную в каждый компонент. Это также последнее средство.

Я отслеживал разговоры об этой проблеме с https://github.com/emberjs/ember.js/issues/12277. Он был практически реализован, но затем закрыт в пользу Grand Testing Unification https://github.com/emberjs/rfcs/pull/119. Есть ли какие-то решения, пока мы ждем грандиозного тестирования?

ответ

2

С подсказками от https://stackoverflow.com/users/1157494/robert-jackson, я смог найти недостающую деталь. Вы можете для поиска владельца в контексте тест, который является недостающим параметр, который нужно кормить инициализаторе:

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

// ... 

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

Теперь все компоненты с имеют глобальные инъекции они требуют!

 Смежные вопросы

  • Нет связанных вопросов^_^