2

Behat 的东西相当新,我遇到了一个我似乎无法绕过的障碍。我一直在盯着文档,在谷歌上搜索就像这是我的工作,并尽我所能避免把我的电脑从防火梯上扔掉。

我正在处理一个相当复杂的项目,而我不是设置它的人。所以我在某些方面有点迷茫。

目前,我正在尝试使用 Sahi 驱动程序,因为 selenium 并没有为我需要测试的一些动态形式削减它。我可以使用默认的 selenium 驱动程序很好地运行测试,但测试失败,因为它没有充分触发表单输入上的 JavaScript 事件。具体来说,它将与该链接中涵盖的解决方法一起使用,但前提是我将浏览器放在焦点上。这意味着当测试在酱汁中或通过 jenkins 与 xvfb 运行时,它会失败。

我解释这一切只是因为这是我的更大问题,我试图通过使用 Sahi 驱动程序来解决这个问题。这让我想到:

[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]  
Unrecognized options "extensions" under "behat"

这就是我尝试按照文档所说的方式为我的 bahat.yml 中的特定配置文件激活 Sahi 驱动程序时得到的结果。

这是默认配置文件和我当前在我的 behat.yml 中使用的配置文件(稍作修改以供公众使用):

    default:
        paths:
            features: 'features'
            bootstrap: '%behat.paths.features%/bootstrap'

    sahi:
        extensions:
            Behat\MinkExtension\Extension:
                 sahi:    ~
        context:
            class: 'FeatureContext'
            parameters:
                environment: 'staging'
                mink: 'sahi'

Fwiw,测试在一个 vm 上,我 ssh -X 进入,然后使用运行测试

$ behat --tags @test_name_tag --profile=sahi

当我使用默认的 selenium 驱动程序和 @javascript 标签时,浏览器会弹出并且测试运行并通过(当然,假设我保持浏览器处于焦点)。

我使用 composer 安装了额外的驱动程序:

    {
        "require": {
                "behat/behat": "2.4.*@stable",
                "behat/mink": "1.4@stable",
                "behat/mink-extension": "*",
                "behat/mink-selenium2-driver": "*",
                "behat/mink-sahi-driver": "*"
        }
    }

我已经添加use Behat\Mink\Driver\SahiDriver;到我的 MinkContext.php、EnvironmentContext.php 和 FeatureContext.php,虽然我猜这可能是矫枉过正或没有必要。不过,在这一点上似乎没有什么不同。无论有没有它,我都会遇到同样的错误。

我还添加了一个sahi.php位于 features/bootstrap/mink 中的:

    <?php

    return
    array(
        'default_session' => 'sahi',
        'sahi' => array(
            'capabilities' => array(
                'browserName' => 'firefox',
                'browserVersion' => 7,
            ),
        ),
    );

exensions我想也许出于某种原因在 features/bootstrap 中添加一个目录可能会有所帮助。甚至在其中插入了一个名为sahi.php. 那没有多大帮助。

我认为这涵盖了一切。提前感谢您的帮助,如果其他地方对此有所帮助,请指导我,因为我已经花了无数个小时寻找并没有找到任何可以帮助我的东西。

更新:

我按照此https://lestbddphp.wordpress.com/2012/08/31/behatcomposer/卸载了旧版本的 behat、mink 和 gherkin,并安装了 2.4 等

我一直在通过文档中的“从 Behat 2.3 迁移到 2.4”。(抱歉,不允许我发布更多链接,但它在 Behat 官方文档中。)

我的composer.json

{
  "require": {
    "behat/behat": "2.4.*@stable",
    "behat/mink": "1.4@stable",
    "behat/mink-goutte-driver": "*",
    "behat/symfony2-extension": "*",
    "symfony/class-loader": "2.1.*",
    "symfony/form": "2.1.*",
    "symfony/validator": "2.1.*",
    "behat/mink-selenium-driver": "*",
    "behat/mink-selenium2-driver": "*",
    "behat/mink-extension": "*",
    "behat/mink-sahi-driver": "*"
  },
  "minimum-stability": "dev",
  "config": {
    "bin-dir": "bin/"
  }
}

behat.yml按照指示将文件移动到项目的根目录。我将我的default个人资料更新为:

default:
    paths:
        features: 'features'
        bootstrap: '%behat.paths.features%/bootstrap'
    extensions:
      Behat\Symfony2Extension\Extension:
        mink_driver: true
        kernel:
          env: test
          debug: true
      Behat\MinkExtension\Extension:
        default_session: symfony2
        sahi:    ~

虽然我不完全确定这就是我需要的。只需按照文档中给出的示例进行即可。

我更新了我vendor/autoload.php的替换require_oncerequire

<?php

// autoload.php generated by Composer

require __DIR__ . '/composer' . '/autoload_real.php';

return ComposerAutoloaderInit::getLoader();

但我对此有点困惑,因为该文件与 docs 中的示例代码不同。如果我要在此处的文档中添加该行,而不是已经存在的内容,那么它只会加载自己。(我试过了。它吐了。)我是不是完全密集,还是这里的措辞令人困惑/误导?我做对了吗?

正如我之前提到的,我有 3 个上下文文件features/bootstrap

FeatureContext.php
EnvironmentContext.php
MinkContext.php

通过 cli 运行测试时,我将它传递--profilebehat.yml. 在几乎所有的配置文件中,FeatureContext都使用了。

    context:
        class: 'FeatureContext'

FeatureContext然后得到EnvironmentContextand MinkContext,据我所知。所以,理论上,一切都应该在那里工作。

只是它不是。

$  bin/behat --profile=sahi

  [ReflectionException]           
  Class AppKernel does not exist

在我添加所有 Symfony 的东西之前,我得到了这个:

Warning: require(Behat\Symfony2Extension\Extension): failed to open stream: No such file or directory in /path/to/project/vendor/behat/behat/src/Behat/Behat/Extension/ExtensionManager.php on line 112

Fatal error: require(): Failed opening required 'Behat\Symfony2Extension\Extension' (include_path='/usr/share/pear:/usr/share/php:/usr/share/git core/templates/hooks:.') in /path/to/project/vendor/behat/behat/src/Behat/Behat/Extension/ExtensionManager.php on line 112

这就是为什么我通过作曲家添加 Symfony 的东西。

还可能值得注意的是:当我忘记通过作曲家安装 Symfony 的东西之前给它传递一个 --profile 时,我得到了这个:

Notice: Undefined index: environment in /home/lbaron/development/BeHat-Functional/features/bootstrap/FeatureContext.php on line 43

Warning: include(/path/to/project/features/bootstrap/environment/.php): failed to open stream: No such file or directory in /path/to/project/features/bootstrap/FeatureContext.php on line 44

Warning: include(): Failed opening '/path/to/project/features/bootstrap/environment/.php' for inclusion (include_path='/usr/share/pear:/usr/share/php:/usr/share/git-core/templates/hooks:.') in /path/to/project/features/bootstrap/FeatureContext.php on line 44

Catchable fatal error: Argument 1 passed to EnvironmentContext::__construct() must be an array, boolean given, called in /path/to/project/features/bootstrap/FeatureContext.php on line 44 and defined in /path/to/project/features/bootstrap/EnvironmentContext.php on line 27

我想这是可以预料的。

所以我现在很茫然。想法?

我将继续努力,看看我是否能弄清楚,但任何想法/输入将不胜感激。

再次更新:

从 yml 中删除扩展部分给了我这个:

Catchable fatal error: Argument 2 passed to Symfony\Component\BrowserKit\Client::__construct() must be an instance of Symfony\Component\BrowserKit\History, array given, called in /usr/share/pear/mink/src/Behat/Mink/Behat/Context/MinkContext.php on line 163 and defined in /home/lbaron/development/BeHat-Functional/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php on line 52

behat.yml 的当前状态:

default:
    paths:
        features: 'features'
        bootstrap: '%behat.paths.features%/bootstrap'
    formatter:
        parameters:
            language: 'en'
    extensions:
      Behat\MinkExtension\Extension:
          sahi: ~
          goutte: ~
4

1 回答 1

1

您正在运行比 2.4(当前版本)更旧的 behat 版本。我可以说是因为您使用的命令是“behat”而不是“bin/behat”。旧版本具有不同的体系结构并且不使用扩展。behat.org 网站上的文档都是新的 2.4 版本,据我所知,不再提供旧版本的文档。您应该将您的 behat 版本升级到 2.4,这里有关于如何执行此操作的指南

于 2012-09-10T08:22:31.917 回答