2013-05-28 3 views
1

Symfony 2 및 phpunit으로 기능 테스트를합니다.유닛 테스트에서 Symfony 2 서비스 오류가 발생했습니다.

하지만 서비스에 약간의 문제가 있습니다. 설명해 드리겠습니다. 테스트를 진행하는 동안 응용 프로그램에서 사용하는 일부 서비스를 사용하고 싶습니다. 그래서 커널을 설정하는 내 설정 기능을 설정 juste :

static::$kernel = static::createKernel(); 
    static::$kernel->boot(); 
    $this->objectFactory = static::$kernel->getContainer()->get('some.application.objectfactory'); 

그래서 나는이를했습니다 내 기능에 나는 그

$var = $this->objectFactory->getObject($id); 
처럼 내 서비스를 호출 할 수 있도록 객체를 반환하는 서비스를 사용합니다

분명히 내 해체 기능에 난 단지 :

protected function tearDown() 
{ 
    $this->client->restart(); 
    unset($this->client, $this->objectFactory); 
} 

그래서 내가 테스트를 실행할 때 나는이 메시지했습니다 내 문제 :

Symfony \ Component \ DependencyInjection \ Exception \ InactiveScopeException : 비활성 범위 ("요청")의 서비스 ("요청")를 만들 수 없습니다.

그리고이 문제를 해결할 방법을 찾을 수 없습니다. 누군가 어떤 아이디어가 있었습니까 ??

심포니의 나의 버전은 2.2.1이며 phpunit을 내 버전은 누군가가 나를 도울 수 있다면 3.7.19

, 나는 매우 행복이 될 수있다.

영어가 유창하지 않은 경우 유감입니다. :

이 작품을 나던 이유 것으로 보인다
 $request = $this->container->get('request'); 

은, 내가 그것을 제거 할 때, 그것은 아무튼 :


은 누군가를 도울 수 어쩌면

, 서비스에 그 사용 EDIT 오류를 말하지 않지만 여전히 작동하지 않습니다.


편집
@Cyprian 에 따르면 당신은 내가 원하는 것을 바꿀 수 있습니다. 그래서 난 그냥 내가 원하는 기능, 클라이언트 (클라이언트 웹 테스트 케이스)에, 내 서비스에 추가 한 다음 함수 내에서 난 그냥이 추가 : 내가 전화를 어디에 내 기능에 따라서

if (isset($client)) { 
     $request = $client->getRequest(); 
    } else { 
     $request = $this->container->get('request'); 
    } 

public function getObject($id) 
{ 
    //Get the service from the kernel 
    $service = static::$kernel->getContainer()->get('service'); 
    $object = $service->getObject($id, $this->client); 
} 

과 당신의 생각은 나를 위해 작동하지 않습니다이

@nifr 처럼 잘 작동하지만 난 당신의 생각, 그들은 그냥 작품 잘못이 아니었다 생각 : 서비스 난 그냥이했습니다 내 경우에

당신의 도움에 대한개

그러나 덕분에, 나는 지금 작동 행복 해요, 나는 해당 게시물은

답변

0

수리하지, 클라이언트로부터 요청을받을 용기를보십시오에서 커널을 클라이언트는 두 개의 요청 사이에서 재부팅됩니다. 그래서, 예를 들어 클라이언트의 컨테이너에 모의 객체를 전달하고 요청을하면 다음 요청 (첫 번째 요청 이후)에 컨테이너에 모의이 포함되지 않습니다.

+0

어떤 업데이트로 아이디어에 따르면, 저에게 효과적입니다. – Babou34090

0

다른 사람만큼 당신이 하나를 구성하지 않는 한 phpunit을 사용할 수없는 요청이 없습니다 도움이 될 것으로 예상된다.

요청을 테스트하려는 경우. 다음과 같이 작성하십시오 :

use Symfony\Component\HttpFoundation\Request; 

protected $request; 

public function setUp() 
{ 
    // ... 
    $this->request = new Request(); 
    // ... modify your request acccording to your needs 
} 

및 요청을 사용하여 서비스에 설정자를 추가/호출하십시오.

$service = $this->kernel->getContainer()->get('your_service') 
$service->setRequest($this->request); 

또는 WebtestCase를 사용하여 Functional Test을 작성하십시오.

$kernel = $this->client->getKernel(); 
$container = $this->client->getContainer(); 

하나 더 유용한 팁 : 당신은 또한 커널 및/또는 용기를 얻을 수있는 방법으로

$request = $this->client->getRequest(); 

:

+0

사실 나는 이미 기능 테스트에 사용하고 있습니다. 웹 서비스의 가치를 내 테스트에 확인하는 데 사용해야한다는 의미입니다. 그리고 저는 이미 WebTestCase를 확장하고있어서 클라이언트를 가지고 있습니다. setRequest에 대한 아이디어를 확인할 것입니다. 다음과 같은 의미입니까? http://symfony.com/doc/2.0/components/http_foundation/introduction.html ??? – Babou34090

+0

=> 내가 편집에서 말했듯이, 나에게는 효과가 없지만 틀림없이 잘못된 것은 아닙니다. 도움을 주셔서 감사합니다. – Babou34090