这个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
然后得到EnvironmentContext
和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的原因。
也可能需要注意:当我忘记传递它--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: ~