2014-10-17 3 views
2

Beat와 Mink를 사용하여 Laravel 프레임 워크를 사용하는 응용 프로그램을 테스트하고 있으므로 Artisan을 사용하여 테스트를 실행하기 전에 데이터베이스를 설정하려고합니다.Behat @BeforeSuite에서 base_url 가져 오기

Artisan을 올바르게 구성하려면 테스트 할 도메인을 알아야하며 따라서 Laravel 환경을 사용해야합니다. 이것은 사용중인 다양한 프로파일 아래 behat.yml에 나열되어 있습니다. 예 :

default: 
    extensions: 
     Behat\MinkExtension\Extension: 
      base_url: http://www.example.com 
      ... 
daniel: 
    extensions: 
     Behat\MinkExtension\Extension: 
      base_url: http://example.dev 

@BeforeSuite에서 base_url 값을 가져올 수 있습니까?

여기에서 가장 큰 문제는 @BeforeSuite가 정적이어야하고 따라서 밍크에 액세스 할 수 없어서 $this->getMinkParameter('base_url') 일 수는 없다는 것입니다.

$suiteEvent->getContextParameters()으로 매개 변수에 액세스 할 수 있으므로 URL을 복제 할 수 있지만 클리너 솔루션이 있습니다.

답변

1

일부 후크가 작동하는 방식은 실제로 나를 괴롭 힙니다. 매개 변수는 컨텍스트가 인스턴스화 될 때까지 전달되지 않으므로 실제로 생성되기 전에 컨텍스트에서 컨텍스트로 가져 오는 것이 쉽고 간편합니다. 가장 좋은 점은 databaseReady 플래그 @BeforeScenario 이벤트를 사용하기 위해이 같은 것입니다 :

protected static $databaseReady; 

/** 
* @BeforeScenario 
*/ 
public function setupDatabase() 
{ 
    if (!self::$databaseReady) { 

     // Set it up… 

     self::$databaseReady = true; 
    } 
} 

그러나 나는 그것이 Laravel에서 어떻게하는지 모르겠지만, 대부분의 프레임 워크는 설정 및 부트 스트랩을 위해 포함을 다른 환경. 이러한 것을 보관하고 데이터베이스를 포함하여 환경을 설정하는 부트 스트랩 스크립트 (@BeforeSuite 후크에서 실행 가능)를 사용하는 것이 좋습니다.

+1

이 완벽했다. Artisan/Laravel 전체 답변을 여기에 넣을 수는 없지만 관심있는 사람에게는이 대답과이 질문에 대한 내 이전 답변의 조합이 될 것입니다. http://stackoverflow.com/questions/24643449/laravel-4 -2-artisancall-ignoring-env-option/26425714 # 26425714 – DanielM

+0

다음은 모두 함께 사용할 때 어떻게 작동하는지 대략적인 요지입니다. https://gist.github.com/Gisleburt/62ce3507eb792c42dfae – DanielM

1

이 더러운 해킹하지만 당신은 @BeforeSuite 후크에서 그것을 할 수있는 경우는 다음과 같이 그것을 얻을 수 있습니다

use Behat\Testwork\ServiceContainer\Configuration\ConfigurationLoader; 
$config = new ConfigurationLoader('BEHAT_PARAMS', getcwd() . '/behat.yml'))->loadConfiguration(); 
$baseUrl = $config[0]['extensions']['Behat\\MinkExtension']['base_url']; 
+0

이렇게하면 입력하지 못할 수 있습니다. @ BeforeScenario 여러 번. 어느 쪽도 특히 깨끗하지는 않지만 나는 그 둘을 좋아합니다. :) – DanielM