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_once
为require
:
<?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 运行测试时,我将它传递--profile
给behat.yml
. 在几乎所有的配置文件中,FeatureContext
都使用了。
context:
class: 'FeatureContext'
FeatureContext
然后得到EnvironmentContext
and 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: ~