시나리오 : 실제 서비스 my-service
을 사용하여 통합 테스트 구성 요소 A에 설치하려고합니다. 전역으로 모든 구성 요소에 서비스를 주입하는 초기화 프로그램이 있습니다 : 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으로 추적했습니다. 거의 시행되었지만 대대적 인 시험 통일 https://github.com/emberjs/rfcs/pull/119에 찬성하여 마감했습니다. Grand Testing Unification을 기다리는 동안 해결책이 있습니까?