2

私がやろうとしているのは、バンドル(再利用可能なバンドル)の機能テストです。もっと深く:

  • 指定されたURLへのリクエストを作成します/my/url
  • 呼び出されたことを確認しMyParamConverter、リクエストを次のインスタンスに変換しますMyObject
  • コントローラがスローすることを確認しますmy.event

Symfony\Bundle\FrameworkBundle\Test\WebTestCaseドキュメントに従って、新しいクライアントを拡張して作成する必要があります。

    $client  = static::createClient();
    $crawler = $client->request('GET', '/my/url');

このようにすると、どのバンドルがロードされますか?環境で使用する構成ファイルを指定するにはどうすればよいですか(デフォルトはtest)ですか?

編集:わかりました、私の質問をよりよく説明する時間です。私は再利用可能なバンドル、たとえばAcmeMessagingBundleを絞り込んでいます。今、私はそれを機能テストしたいと思います。シナリオは次の呼び出し/my/urlです:

public function testReceiveApiRoute()
{
    $client = $this->createClient();

    /** @var $route \Symfony\Component\Routing\Route */
    $route  = $client->getContainer()->get('router')
        ->getRouteCollection()->get('acme_messaging_receive');

    $this->assertNotNull($route);
    $this->assertEquals('POST', $route->getRequirement('_method'));
    $this->assertEquals('acme_messaging.controller.api:receive',
        $route->getDefault('_controller'));
}

/**
 * @depends testReceiveApiRoute
 */
public funcion testReceiveApiWorkflow()
{
    $client = $this->createClient();

    // Make a POST request
    $request = Request::create('/my/route', 'POST', array(
        'a' => 'value'
    ));

    // Request is convered in MyObject instance and that my.event is fired
}

このテストでは、app/config_test.ymlがロードされます(「メイン構成ファイル」など)。質問は:

テストを「分離」してはいけません。つまり、メインの構成ファイルを使用しないのですか?私のバンドルが空の別の人によってテストされた場合はどうなりapp/config_test.ymlますか?テストは失敗します...

プレフィックス付きのルートでもテストは失敗します。AcmeMessagingBundlerouting.xmlからプレフィックスを付けてインポートすると、testReceiveApiWorkflow失敗します。

4

1 に答える 1

3

を使用すると、テスト環境でWebTestCase独自のものを使用します。AppKernel

アプリに新しい環境を追加して、次のWebTestCaseように使用することができます。

$client = static::createClient(array('environment' => 'new_env'));

より安全な方法は、バンドルのテストでsanboxedされたアプリを作成することです。JMSCommandBundleを使用して生成できます。このトリックを使用して、バンドルを確認するsanboxedアプリケーションを作成することもできます:https ://github.com/schmittjoh/JMSPaymentCoreBundle/tree/master/Tests/Functional

于 2012-09-27T08:10:30.070 に答える