2016-09-21 10 views
0

コンポーネント統合テストで問題が発生しました。簡単に説明すると、私のコンポーネントは、ember-can機能を使用して表示するオプションを選択するサブコンポーネントを使用します。Ember testing:コンポーネントテストでコントローラを注入する

この能力は、現在のプロジェクトがどれであるかを知るためにコントローラに依存しているため、ユーザーの許可は何ですか。コンポーネントの統合テストを行う際

もちろん
application.inject('ability', 'projectController', 'controller:project'); 

、能力がコントローラを見つけることができない、またプロジェクトので、常に考えてみます。だから、私たちのapp.jsファイルに、我々はそのような何かを持っていますユーザーに必要な権限がありません。

私はそのようなこれまでのものを試してみました:(テストドキュメントがサービスを注入する方法を示していますが、コントローラの注入にはかなり悪い)

this.register('controller:project', Ember.Object.create({ 
    project: this.project 
})); 
this.inject.controller('controller:project', {as: 'projectController'}); 

をしかし、これは能力への影響はありません。

誰かがその問題の解決方法を知っていますか?

敬具、あなたが達成しようとしている何 ヴィンセント

+0

'Ember.inject.controller( 'controllername')'を実行してコントローラを別のコントローラに注入し、必要なプロパティをコンポーネントに渡すことができます。あなたが何を見ているのかわからないのは、私たちが答えを待つことが可能です。 – kumkanillam

答えて

0

は、テストの目的のために、アプリケーションで何かのstubingしているようです。あなたがコンポーネント統合テストを行っているとすれば、のember-qunitを経由してTestModuleForComponentに、ember-test-helperspackageに依存していると仮定します。このモジュールは、needs:[...]integration: true/false、およびunit: true/falseのプロパティーの組み合わせに応じて設定が異なります。しかし、あなたがintegration: trueを設定することによって、またはneeds: ['some']を指定することで、どちらかの統合テストを行っている場合は、このようなあなたのテストの範囲内から所有者にアクセスすることができます:あなたは、あなたがそれにlookupを行うことができます所有者を取得した後

test('my test', function(assert) { 
    const owner = Ember.getOwner(this); 
}); 

。あなたもそうのようにそのregisterunregistercontainerを使用することができ、あなたのケースの場合:

test('my test', function(assert) { 
    this.container.unregister('controllers:my-controller'); 
    this.container.register('controllers:my-controller', ActualController.extend({ 
     someStubbedProp: 'value' 
    }), {instantiate: false}); 
}); 

あなたは(つまり、アダプタなど)シングルトンオブジェクトを扱っている場合は、それらが上のインスタンス化されていないことを確認する{instantiate: false}を指定していることに注意してください彼らはアプリの起動時にインスタンス化されるように登録時間。

あなたは、アプリケーションに必要なものにコントローラを「注入」するのと同じ手法を使用できます。あなたはそれへのアクセスを得るでしょうActualControllersomeStubbedInjection小道具にアクセスすることにより、その後

test('my test', function(assert) { 
    this.container.unregister('controllers:my-controller'); 
    this.container.register('controllers:my-controller', ActualController.extend({ 
     someStubbedInjection: Ember.computed({ 
      get(){ 
       return Ember.getOwner(this).lookup('controller:some-other-controller-you-want-to-access'); 
      } 
     }) 
    }), {instantiate: false}); 
}); 

:しかし、この技術は、実際には本当に他に一つのことを注入しないだろうが、それはあなたがスタブされているプロパティを経由して、すなわち、コントローラにアクセスできるようになります。

関連する問題