シナリオ: 実際のサービスを使用してコンポーネント A を統合テストしたいと考えていますmy-service
。すべてのコンポーネントにサービスをグローバルに注入する初期化子があります: application.inject('component', 'myService', 'service:my-service');
. コンポーネント A はそのテンプレートでコンポーネント B を使用myService
し、両方ともテンプレートで使用します。
グローバル インジェクションを再作成するにはどうすればよいですか? 完全なアプリケーションはありません。必要なパラメーターがないため、実際のイニシャライザーをインポートして実行することはできません。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を支持して閉鎖されました。グランドテストの統一を待っている間に解決策はありますか?