1

(誰かが私がやりたいことを達成するためのより良い方法を知っている場合に備えて、状況を説明します)。

Symfony2 + Behat + Symfony2Extension + Mink + の使用

シナリオ中にアクセスされる複数の URL を持つアプリケーションがあります。

FeatureContext __construct メソッドから送信されたパラメーターを使用していることは理解していますが、私がしようとしているのは、behat.yml ファイルに URL を設定して、カスタム コンテキストでそれらを使用して URL にアクセスできるようにすることです。

拡張機能がどのように機能するかを見て、次のように依存性注入をセットアップしました。

class Extension implements ExtensionInterface
{

    /**
     * Loads a specific configuration.
     *
     * @param array            $config    Extension configuration hash (from behat.yml)
     * @param ContainerBuilder $container ContainerBuilder instance
     */
    public function load(array $config, ContainerBuilder $container)
    {
        $container->setParameter('url_one', $config['url_one']);
        $container->setParameter('url_two', $config['url_two']);

    }

    /**
     * Setups configuration for current extension.
     *
     * @param ArrayNodeDefinition $builder
     */
    public function getConfig(ArrayNodeDefinition $builder)
    {
        $builder->
            children()->
                scalarNode('one_url')->
                isRequired()->
                end()->
                scalarNode('two_url')->
                isRequired()->
                end()->
            end();
    }  
 code continues....

そして、私の behat.yml は次のようになります。

default:
    extensions:
        Behat\MinkExtension\Extension:
            goutte: ~
            selenium2: ~
        Behat\Symfony2Extension\Extension: ~
        Acme\AcmeExtension\Extension:
            url_one: 'http://example1.com'
            url_two: 'http:/example2.com'

今私の FeatureContext.php クラスで、次のことをしたいと思います:

        $url = $kernel->getContainer()->getParameter('url_one');

しかし、これは機能していません。symfony2extension が有効になっているため、Symfony2 アプリケーションからパラメーターが返されます。しかし、拡張クラスからパラメーターまたはサービスにアクセスできません。

(load メソッドの Extension クラスにいて、設定したパラメーターを呼び出すと、それが返されるので、設定されていることはわかっていますが、別のコンテナーに設定する必要があることに注意してください。)

まず、これは可能ですか?もしそうなら、それを機能させるために私は何をすべきですか?

助けてくれてありがとう。

4

1 に答える 1

4

明らかに$kernel->getContainer()、Symfony2 アプリ カーネルのコンテナーが返されます。これらのカーネルとコンテナーは Behat と共有されません。Behat には独自のコンテナ インスタンスがあり、これを使用して独自のサービスを管理します。これは、拡張機能が Behat コンテナー内でパラメーターを設定しているにもかかわらず、アプリカーネル コンテナーにアクセスしようとしていることを意味します。そのため、さまざまな結果が得られます。

ここで問題は、拡張機能からコンテキスト クラスに値を渡す方法です。答えはコンテキスト初期化子です。チェックアウト:

于 2013-02-15T22:06:36.177 に答える