この Behat のことはかなり初めてで、回避できないように見える障害に遭遇しました。私はドキュメントをじっと見つめ、自分の仕事のようにグーグルで検索し、非常階段からコンピューターを放り出さないように最善を尽くしてきました。
私はかなり複雑なプロジェクトに取り組んでいますが、それを設定したのは私ではありません。だから私はいくつかの分野で少し迷っています。
現在、私は Sahi ドライバーを使用しようとしています。これは、テストする必要があるいくつかの動的フォームに対してセレンがそれをカットしていないためです。デフォルトの Selenium ドライバーでテストを正常に実行できますが、フォーム入力時に JavaScript イベントを適切にトリガーしないため、テストは失敗します。具体的には、そのリンクで説明されている回避策で動作しますが、ブラウザーにフォーカスがある場合に限ります。つまり、テストがソースで実行された場合、または 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 上にあり、そこに -X を ssh してから、次を使用してテストを実行します。
$ 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 にある a も追加しました。
<?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 への移行」を進めてきました。(申し訳ありませんが、これ以上リンクを投稿することはできませんが、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
とを取得します。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
これが、composer を介して Symfony のものを追加した理由です。
また、おそらく注意してください: composer を介して 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: ~