1

シナリオ:実際のサービス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に賛成して閉鎖された。グランドテストの統一を待っている間、今、解決策はありますか?

答えて

2

https://stackoverflow.com/users/1157494/robert-jacksonのヒントで、見つからなかった部分が見つかりました。今

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

// ... 

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

すべてのコンポーネントで、彼らが必要とグローバル注射を持っている:あなたはイニシャライザにフィードする必要が欠落しているパラメータである、テストコンテキストで所有者を検索することができます!

関連する問題