2

この 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.phpfeatures/bootstrap/mink にある a も追加しました。

    <?php

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

exensionsfeatures/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: ~
4

1 に答える 1

1

2.4 (現在のバージョン) より古いバージョンの behat を実行しています。あなたが使用しているコマンドは「bin/behat」ではなく「behat」であるため、わかります。古いバージョンはアーキテクチャが異なり、拡張機能を使用していませんでした。behat.org Web サイトのドキュメントはすべて新しい 2.4 バージョン用であり、私の知る限り、古いバージョンのドキュメントはもう入手できません。Behat のバージョンを 2.4 にアップグレードする必要があります。これを行う方法については、こちらのガイドを参照してください。

于 2012-09-10T08:22:31.917 に答える