2016-09-21 5 views
0

구성 요소 통합 테스트 중 하나에 문제가 있습니다. 간단히 설명하기 위해 내 구성 요소는 표시 할 옵션을 선택할 수있는 ember-can 기능을 사용하는 하위 구성 요소를 사용합니다.Ember 테스트 : 구성 요소 테스트에 컨트롤러 주입

능력은 컨트롤러에 의존하여 현재 프로젝트와 사용자의 권한을 파악합니다. 구성 요소의 통합 테스트를 수행 할 때

물론
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 것으로 보인다. 당신이 구성 요소 통합 테스트를하고 있다고 감안할 때 이 이고 TestModuleForComponentember-test-helperspackage에 의존한다고 가정합니다. 이 모듈은 needs:[...], integration: true/falseunit: true/false 속성의 조합에 따라 다르게 설정됩니다. 당신이 integration: true을 설정하거나 needs: ['some']을 지정하여 하나의 통합 테스트를하고있다 그러나 경우는 다음과 같이 테스트 범위 내에서 소유자에 액세스 할 수 있습니다

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

당신이 주인을 얻을 후 당신이 그것에 lookup 할 수 있습니다. 귀하의 경우에 당신은 또한과 같이 그 registercontainerunregister를 사용할 수 있습니다

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}); 
}); 

을 .

관련 문제