在Behat中配置Symfony

时间:2012-10-04 10:11:58

标签: php symfony behat

我有一个项目,我已经在Behat中编写了功能/场景,现在几乎完成了。我必须在网站上测试symfony派上用场的电子邮件功能。但是,我找不到任何帮助我从Behat中配置symfony的教程。大多数网站都提供Symfony中的Behat而不是其他方式。

这篇文章我发现有一些关于配置的信息,但它并不完整。 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/"
    }
}

有人可以在这里指导我吗?

3 个答案:

答案 0 :(得分: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指定所需的Bundle:

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并享受!

php bin/behat @AcmeDemoBundle

答案 1 :(得分:1)

使用symfony运行behat所需的依赖项是behat,symfony2-extension,mink和drivers,你可能需要格式化程序才能获得所需的输出。

然后你需要为驱动程序,会话和浏览器配置behat.yml并命名测试套件。

完成此操作后,您需要添加功能和FeatureContext来编写测试场景并定义自定义步骤。

我已经使用behat + mink + selenium + symfony here添加了我的symfony安装的详细配置。请检查它是否适合您。

答案 2 :(得分:0)

我不确定我是否完全理解您要实现的目标,但是您尝试实现Symfony2项目的不同配置这一事实让我觉得您应该使用自定义环境。 See this cookbook article关于如何去做。{/ p>

例如,您可能想要设置一个“behat”环境,该环境具有自己的配置文件(/app/config/config_behat.yml),并且可以使用您的behat测试中的/app_behat.php/进行访问。