私がやろうとしているのは、バンドル(再利用可能なバンドル)の機能テストです。もっと深く:
- 指定された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
失敗します。