2

我有一个项目,我在 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/"
    }
}

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

4

3 回答 3

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
于 2013-08-26T13:54:24.580 回答
1

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

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

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

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

于 2017-05-09T13:30:43.290 回答
0

我不确定我是否完全理解您要实现的目标,但是您尝试实现 Symfony2 项目的不同配置这一事实使我认为您可能应该使用自定义环境。请参阅此食谱文章,了解如何去做。

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

于 2012-10-04T10:44:41.697 回答