2012-09-27 1 views
2

내가하려는 것은 내 번들 (재사용 가능한 제품)의 기능 테스트입니다.번들을 기능 테스트하는 데 WebTestCase를 사용할 때 구성을 지정 하시겠습니까?

  • MyParamConverter 호출 및 컨트롤러가 my.event

를 던졌습니다 MyObject

  • 확인의 인스턴스로 요청을 변환됩니다 /my/url
  • 확인하는 것이 주어진 URL에 대한 요청을 만듭니다 깊은 더 많은 문서에 따라 Symfony\Bundle\FrameworkBundle\Test\WebTestCase을 확장하고 새 클라이언트를 만들어야합니다.

    $client = static::createClient(); 
        $crawler = $client->request('GET', '/my/url'); 
    

    이렇게하면 어떤 번들이로드됩니까? 환경에서 사용할 구성 파일을 지정하려면 어떻게해야합니까 (기본 값은 test으로 가정).

    편집 : 좋아, 제 질문에 대해 더 자세히 설명해주십시오. 재사용 할 수있는 번들을 짜내고 있습니다. AcmeMessagingBundle. 이제 기능 테스트를하고 싶습니다. ("기본 설정 파일"을 말한다)이 테스트와

    public function testReceiveApiRoute() 
    { 
        $client = $this->createClient(); 
    
        /** @var $route \Symfony\Component\Routing\Route */ 
        $route = $client->getContainer()->get('router') 
         ->getRouteCollection()->get('acme_messaging_receive'); 
    
        $this->assertNotNull($route); 
        $this->assertEquals('POST', $route->getRequirement('_method')); 
        $this->assertEquals('acme_messaging.controller.api:receive', 
         $route->getDefault('_controller')); 
    } 
    
    /** 
    * @depends testReceiveApiRoute 
    */ 
    public funcion testReceiveApiWorkflow() 
    { 
        $client = $this->createClient(); 
    
        // Make a POST request 
        $request = Request::create('/my/route', 'POST', array(
         'a' => 'value' 
        )); 
    
        // Request is convered in MyObject instance and that my.event is fired 
    } 
    

    , app/config_test.yml가로드 : 시나리오 /my/url를 호출합니다. 질문 :

    기본 구성 파일을 사용하지 않음을 의미하는 "고립"상태로 테스트하지 않아야합니까? 내 번들이 비어있는 다른 사람이 테스트 한 경우 app/config_test.yml? 테스트가 실패합니다 ...

    테스트는 접두사가 붙은 경로에서도 실패합니다. AcmeMessagingBundle의 routing.xml을 접두어로 가져 오면 testReceiveApiWorkflow이 실패합니다!

  • +0

    질문을 이해할 수 없습니다. "로드 된 번들"은 무엇을 의미합니까? 맞춤 웹 테스트 클라이언트를 지정하는 방법을 의미 했습니까? 또는 어떤 설정 파일이로드되었는지 확실하지 않을 수도 있습니다. 제발, 약간의 설명을 해주세요 – Cyprian

    +0

    @ Cyprian 어떤 설정 파일이로드 될지 모르겠습니다. 나는'config_test.yml'을 (app/config에서)'config_dev.yml'을로드한다고 가정합니다. 제가 알고 싶습니다. 좋은 연습입니까? 어떻게하면'app/config/config_test.yml' 대신'/ Tests/Fixture/config_test.yml'에서 설정 파일을 사용할 수 있습니까? – gremo

    +0

    Bundle \ Resources \ config \ services.yml (또는 xml)에 "test.client"라는 서비스를 추가하는 것만으로도 충분하다고 생각합니다. 이 파일은 DI \ Extension 파일에 의해로드되고 프레임 워크는 기본 WebTestClient 대신 서비스를 사용하는 방식으로 "test.client"이름을 처리합니다. 그러나 추가 구성 파일을로드하려면이 문서가 유용 할 수 있습니다. http://symfony.com/doc/2.0/cookbook/bundles/extension.html. 인사말! – Cyprian

    답변

    3

    WebTestCase을 사용하면 AppKernel을 테스트 환경과 함께 사용합니다.

    당신은 당신의 응용 프로그램에 새 ENV를 추가하고,이 같은 WebTestCase에서 사용할 수 있습니다 :

    $client = static::createClient(array('environment' => 'new_env')); 
    

    더 안전한 연습 번들의 테스트에서 sanboxed 응용 프로그램을 작성하는 것입니다. JMSCommandBundle을 사용하여 생성 할 수 있습니다. 또한이 트릭을 사용하여 번들을 바라 보는 sanboxed 응용 프로그램을 만들 수도 있습니다. https://github.com/schmittjoh/JMSPaymentCoreBundle/tree/master/Tests/Functional

    +0

    내 질문을 업데이트했습니다. 마지막 해결책은 내가 의미하는 것 같지만 더 자세히 조사해야합니다 ... – gremo