2013-03-19 3 views
10

symfony2 컨트롤러에서 Response 개체를 반환하는 컨트롤러를 테스트하고 싶습니다. 내 테스트 클래스는 WebTestCase에서 확장됩니다. 운영 클라이언트를 얻으려면 static::createClient()을 사용합니다.symfony2 컨트롤러의 기능 테스트 : 경로 생성 방법

제 문제는 현재 가상 호스트로 설치 한 상태에서이라는 좋은 경로를 호출하기 위해 입니다.

$client->getContainer()->get('router')->generate('my_route', array(), true) 로컬 호스트를 호스트로하여 경로를 생성하십시오. 하지만 myproject.local을 호스트로 사용하기 때문에 작동하지 않습니다.

$client->getContainer()->get('kernel')->getRootDir() 및 기타 dir 방법은 웹 경로가 아닌 Linux 파일 경로를 제공합니다.

저는 프로젝트에서 혼자만의 것이 아니기 때문에 하드 코딩 할 수 없습니다. 올바른 경로를 얻는 방법은 무엇입니까? 아니면 컨트롤러를 테스트 할 다른 방법이 있습니까?

+0

왜 당신은'generate' 방법에 대한 세 번째 인수로'TRUE '를 전달합니까? 정말로 생성 된 절대 URL이 필요합니까? –

+0

예, 기본 URL도 localhost를 통해 링크되어 있기 때문입니다. 또는 컨트롤러를 테스트 할 다른 방법이 필요합니다. – AlphaB

+0

Symfony가 제공 한 테스트 클라이언트를 사용하고 있지 않습니까? –

답변

9

Symfony2의 테스트 프레임 워크 (WebTestCase) 만 서로 다른 환경에서 응용 프로그램을 테스트 할 수 있도록 상대 경로를 필요로 내장 :

$client->getContainer()->get('router')->generate('my_route', array(), false); 

심포니는 커널이 그 생성의 인스턴스에 대한 HTTP 클라이언트 및 테스트를 시뮬레이션 테스트. 웹 서버가 없습니다.

당신은 클라이언트 시뮬레이션이 여기에 작동하는 방법에 대한 자세한 읽을 수 : 심포니 문서에서 언급 한 바와 같이 URL에 변화가 최종 사용자에게 영향을하고 있기 때문에, 당신은 절대 URL을 사용해야합니다 http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

7

은 무엇 싶어 커버 이잖아 귀하의 기능 테스트도.

"기능 테스트를위한 하드 코딩은 테스트가 Symfony 라우터를 사용하여 URL을 생성하면 최종 사용자에게 영향을 줄 수있는 응용 프로그램 URL의 변경 사항을 감지하지 못합니다."

여기에 더 많은 정보를 참조하십시오 : http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

+2

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. – serenesat

+0

안녕하세요, @ 힌트를 주셔서 감사합니다. 요점을 봅니다. 방금 필수적인 부분의 인용문을 추가했습니다. – honzalilak

관련 문제