2014-06-23 3 views
4

ember-cli 0.0.35를 사용하고 있고 이니셜 라이저를 통해 내 구성 요소에 종속성을 주입하고 있습니다. 그것은 개발에서 훌륭하게 작동하지만 테스트를 실행할 때 속성이 존재하지 않습니다. 테스트는 loadInitializers를 호출하지만이 종속물 ({})에는 종속성이 나타나지 않습니다.테스트 할 때 초기화 된 종속성이 없습니다.

수동으로 테스트에 삽입하고 싶지 않습니다. 이 문제를 해결할 더 좋은 방법이 있습니까?

이니셜 : 내가 전에 말했듯이 (이 시점에서 용기를 테스트하기 때문에

moduleForComponent('bar', 'Component: Bar', { 
    setup: function() { 
    App = startApp(); 
    component = this.subject({}); 
    }, 
    teardown: function() { 
    Ember.run(App, App.destroy); 
    } 
}); 

test('Properties: foo', function() { 
    // Make sure we injected the service 
    ok(component.foo, 'foo is injected'); 
}); 
+0

과 같을 것이다 다음

App.injectTestHelpers(); 

및하기 전에이 작업을 정의합니다 테스트가 아니며 통합 테스트가 아닙니다. 전체 목표는 단일 작업 단위를 테스트하는 것입니다. 그리고 컨테이너 주입은 분명히 범위 밖입니다. – Kingpin2k

답변

2

, 정말 통합 테스트에 빌려 준다 :

var FooServiceInitializer = { 
    name: 'foo', 
    initialize: function (container, application) { 
    application.inject('component:foo', 'foo', 'service:foo'); 
    } 
}; 
export default FooServiceInitializer; 

가 테스트 실패 ic-ajax로 만든 미니 컨테이너가 아닙니다.)

귀하의 실제 테스트는 (당신이하지 말아야하는) 당신이 모든 것을 고칠 것을 피하기 위해 도우미를 만들 수 있습니다 테스트를 진행하는 동안 컨테이너를 사용하는 방법에 대한 죄책감을 느끼는 경우이

test("root lists 3 colors", function(){ 
    var c = App.__container__.lookup('component:foo-bar'); 
    ok(c.foo.blah); 
}); 

의 라인을 따라입니다 미래에 api가 변경 될 때/그 장소.

Ember.Test.registerHelper('containerLookup', 
    function(app, look) { 
    return app.__container__.lookup(look); 
    } 
); 

당신이 문제는 정말 단위에 대한 더 많은 의미 IC-아약스 당신의 테스트가

test("root lists 3 colors", function(){ 
    var c = containerLookup('component:foo-bar'); 
    ok(c.foo.blah); 
}); 

http://emberjs.jsbin.com/doxigu/edit

+0

그러나 this.subject()에 테스트 내재 된 모의 (mock)를 어떻게 주입합니까? – shredding

+0

나는 this 객체()에 객체로 모의 객체를 전달한다. – shredding