2012-10-04 70 views
2

我有一個項目,我已經在Behat寫了一些功能/場景,現在幾乎完成了。我必須測試symfony派上用場的電子郵件功能。但是,我找不到任何幫助我從Behat內部配置symfony的教程。大多數網站在Symfony中提供Behat而不是其他方式。在Behat配置Symfony

這是我發現的文章有一些配置信息,但它不完整。 http://extensions.behat.org/symfony2

這篇文章http://docs.behat.org/cookbook/using_the_profiler_with_minkbundle.html給出了檢查電子郵件功能的代碼,但它沒有說如何在Behat中配置symfony。我已經安裝了symfony擴展。

這是我composer.json內容:

{ 
    "require": { 
     "behat/behat": "*", 
     "behat/mink": "1.4.0", 
     "behat/mink-goutte-driver": "*", 
     "behat/mink-selenium-driver": "*", 
     "behat/mink-selenium2-driver": "*", 
     "behat/mink-sahi-driver": "*", 
     "behat/mink-zombie-driver": "*", 
     "drupal/drupal-extension": "*", 
     "symfony/process": "*", 
     "behat/symfony2-extension": "*", 
     "symfony/form": "*", 
     "symfony/validator": "*", 
     "behat/mink-extension": "*", 
     "symfony/http-kernel": "*", 
     "fabpot/goutte": "dev-master#5f7fd00" 
    }, 
    "minimum-stability": "dev", 
    "config": { 
     "bin-dir": "bin/" 
    } 
} 

任何人都可以請指導我在這裏?

+0

你想從Behat在Symfony中配置什麼?你能詳細說明你的意思嗎? –

+0

您應該使用behat.yml文件來配置behat。如果你用symfony2extension正確配置了behat,那麼你可以訪問symfony DIC,並且你可以做這樣的事情https://github.com/Behat/CommonContexts/blob/master/Behat/CommonContexts/SymfonyMailerContext.php – l3l0

+0

如果你認爲我們的答覆是你正在尋找的答案,你能接受嗎? –

回答

0

我不確定我是否完全理解了你想要實現的目標,但是你試圖實現Symfony2項目的不同配置的事實讓我認爲你應該使用自定義環境。 See this cookbook article關於如何去做。

例如,您可能想要設置一個「behat」環境,該環境會擁有自己的配置文件(/app/config/config_behat.yml),並且將使用您的behat測試中的/app_behat.php/進行訪問。

+0

我沒有在這裏運行symfony。我正在運行Behat,其中我將symfony2作爲擴展。我想要的是一個教程,將配置這個symfony2擴展在Behat。 –

+0

下面是Symfony2擴展的文檔,您可以在其中找到關於它的所有信息:http://extensions.behat.org/symfony2/我不明白爲什麼需要爲Symfony添加擴展名,因爲您沒有運行Symfony。 。 –

10

在Symfony 2(.2)配置中,您必須將您的behat.yml文件放入根文件夾,因此composer.json所在的文件夾相同。

app/ 
bin/ 
src/ 
vendor/ 
web/ 
behat.yml 
composer.json 

這是一個工作behat.yml的例子:

default: 
    # ... 
    extensions: 
     Behat\Symfony2Extension\Extension: ~ 
     Behat\MinkExtension\Extension: 
      goutte: ~ 
      selenium2: ~ 

現在,你必須啓動behat init command指定您所需的軟件包:

php bin/behat @AcmeDemoBundle --init 

上面的命令將創建Features文件夾,其中包含FeatureContext類。 在這個類中放入你的場景的方法。低於官方的hello world例如:

/** 
* @Given /^I am in a directory "([^"]*)"$/ 
*/ 
public function iAmInADirectory($dir) 
{ 
    if (!file_exists($dir)) 
     mkdir($dir); 

    chdir($dir); 
} 

/** 
* @Given /^I have a file named "([^"]*)"$/ 
*/ 
public function iHaveAFileNamed($file) 
{ 
    touch($file); 
} 

/** 
* @When /^I run "([^"]*)"$/ 
*/ 
public function iRun($command) 
{ 
    exec($command, $output); 
    $this->output = trim(implode("\n", $output)); 
} 

/** 
* @Then /^I should get:$/ 
*/ 
public function iShouldGet(PyStringNode $string) 
{ 
    if ((string) $string !== $this->output) 
     throw new \Exception("Actual output is:\n" . $this->output); 
} 

現在你必須創建(從同樣的例子ls.feature)的特徵文件的Features文件夾中:

Feature: ls 
    In order to see the directory structure 
    As a UNIX user 
    I need to be able to list the current directory's contents 

    Scenario: List 2 files in a directory 
     Given I am in a directory "test" 
     And I have a file named "foo" 
     And I have a file named "bar" 
     When I run "ls" 
     Then I should get: 
      """ 
      bar 
      foo 
      """ 

所以,你Features文件夾的外觀如下面的結構:

Acme\DemoBundle\Features 
    |- Context/
     |- FeatureContext.php 
    ls.feature 

最後,發射behat d享受!

php bin/behat @AcmeDemoBundle 
1

到貝哈特用symfony運行所需的依賴關係是貝哈特,Symfony2的擴展,水貂和驅動程序,您可能需要格式化,以獲得所需的輸出。

然後,您需要爲驅動程序,會話和瀏覽器配置behat.yml,並命名測試套件。

完成此操作後,您需要添加功能和FeatureContext來編寫測試場景並定義自定義步驟。

我已經添加了一個細節配置與我的symfony安裝與behat +貂+硒+ symfony here。請檢查它是否適用於您。