Behat 2.4升级问题或“behat”下无法识别的选项“extensions” - 尝试通过behat.yml激活sahi扩展时出错

时间:2012-09-09 20:38:14

标签: behat sahi mink

这个Behat的东西相当新,而且我遇到了一个障碍,我似乎无法绕过。我一直盯着文档,谷歌搜索就像是我的工作,并尽我所能,不要把我的电脑扔出火灾逃生。

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

目前,我正在尝试使用Sahi驱动程序,因为硒不会因为我需要测试的某些动态形式而切割它。我可以使用默认的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的文件。这没多大帮助。

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

更新

我卸载了旧版本的behat,mink和gherkin,并根据此https://lestbddphp.wordpress.com/2012/08/31/behatcomposer/

安装了2.4,等等

我一直在通过文档中的“从Behat 2.3迁移到2.4”。 (对不起,SO不会让我发布更多链接,但它是官方的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_once来更新我的require

<?php

// autoload.php generated by Composer

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

return ComposerAutoloaderInit::getLoader();

但我有点困惑,因为该文件与example code in the docs不同。如果我在这里添加文档中的行,而不是已经存在的行,那么它只是加载自己。 (我试过了。它被殴打。)我是完全密集的,还是这里的措辞令人困惑/误导?我这样做了吗?

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

FeatureContext.php
EnvironmentContext.php
MinkContext.php

通过cli运行测试时,我将其传递给--profile,然后使用behat.yml中的相应配置文件。在几乎所有的配置文件中,都使用了FeatureContext

    context:
        class: 'FeatureContext'

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

只有它不是。

$  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的原因。

也可能需要注意:当我忘记传递它--profile时,在通过composer安装Symfony之前,我得到了这个:

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: ~

0 个答案:

没有答案