2014-09-10 26 views
0

我只想從FeatureContext.php文件訪問screen_shots_path parameter但寫入$this->getMinkParameter('screen_shots_path');不起作用?在FeaturesContext中訪問behat.yml變量

任何人都知道該怎麼做?

在此先感謝

我檢查this one但類extends BehatContext和礦山extends MinkContext所以我GIOT困惑如何使用它我的。

運動/ behat.yml

default: 
    context: 
     class: 'FeatureContext' 
    extensions: 
     Behat\Symfony2Extension\Extension: 
      mink_driver: true 
      kernel: 
       env: test 
       debug: true 
     Behat\MinkExtension\Extension: 
      base_url: 'http://localhost/local/sport/web/app_test.php/' 
      files_path: 'dummy/' 
      screen_shots_path: 'build/behat/' 
      browser_name: 'chrome' 
      goutte: ~ 
      selenium2: ~ 
    paths: 
     features: 'src/Football/TeamBundle/Features' 
     bootstrap: %behat.paths.features%/Context 

運動/ src目錄/足球/ TeamBundle /功能/語境/ FeatureContext.php

namespace Football\TeamBundle\Features\Context; 

use Behat\MinkExtension\Context\MinkContext; 
use Behat\Mink\Exception\UnsupportedDriverActionException; 
use Behat\Mink\Driver\Selenium2Driver; 

class FeatureContext extends MinkContext 
{ 
    /** 
    * Take screen-shot when step fails. 
    * Works only with Selenium2Driver. 
    * 
    * @AfterStep 
    * @param $event 
    * @throws \Behat\Mink\Exception\UnsupportedDriverActionException 
    */ 
    public function takeScreenshotAfterFailedStep($event) 
    { 
     if (4 === $event->getResult()) { 
      $driver = $this->getSession()->getDriver(); 

      if (! ($driver instanceof Selenium2Driver)) { 
       throw new UnsupportedDriverActionException(
        'Taking screen-shots is not supported by %s, use Selenium2Driver instead.', 
        $driver 
       ); 

       return; 
      } 

      #$directory = 'build/behat'; 
      $directory = $this->getMinkParameter('screen_shots_path'); 

      if (! is_dir($directory)) { 
       mkdir($directory, 0777, true); 
      } 

      $filename = sprintf(
       '%s_%s_%s.%s', 
       $this->getMinkParameter('browser_name'), 
       date('Y-m-d') . '_' . date('H:i:s'), 
       uniqid('', true), 
       'png' 
      ); 

      file_put_contents($directory . '/' . $filename, $driver->getScreenshot()); 
     } 
    } 
} 

回答

1

我知道你已經標記它作爲一個Symfony問題,可能會影響到它的某個方面,但是從代碼看來,它似乎不是,所以問題可能在下面。

假設您使用Mink Extension 1.x而不是2.x,則screen_shots_path參數不在受支持的列表中。事實上,2.x也不支持它,但是當它在配置中發現某些非法內容時它會立即拋出異常。也許1.x不這樣做。您可以看到支持的參數here

最有可能的原因,screen_shots_path簡單地被忽略,當配置正常化,因此getMinkParameter('screen_shots_path')不返回任何東西。我敢打賭,如果您嘗試與files_path相同,則會看到dummy/

如果您想保留behat.yml中的配置,最好的機會是直接將它們傳遞給上下文,請參閱documentation

# behat.yml 
default: 
    context: 
     class: FeatureContext 
     parameters: 
      screen_shots_path: 'build/behat/' 

這將被傳遞給您可以初始化本地參數的構造函數。或者,您可以使用靜態參數並通過其他上下文訪問它。

class FeatureContext extends MinkContext 
{ 
    protected $screenShotsPath; 

    public function __construct($parameters) 
    { 
     $this->screenShotsPath = isset($parameters['screen_shots_path']) ? $parameters['screen_shots_path'] : 'some/default/path'; 
    } 

    public function takeScreenshotAfterFailedStep($event) 
    { 
     $directory = $this->screenShotsPath; 
    } 
} 
+0

我會嘗試它,當我回家但從我的理解是這是我應該在我的FeatureContext做什麼? :'public function __construct(array $ parameters){$ this-directory = $ this-> getMinkParameter('screen_shots_path'); }' – BentCoder 2014-09-11 10:38:22

+0

差不多。查看更新的部分。 – 2014-09-11 10:44:11

+0

可愛的。我今晚會檢查一下並告訴你。現在感謝。 – BentCoder 2014-09-11 10:57:52