2013-03-19 6 views
10

symfony2コントローラでは、Responseオブジェクトを返すコントローラをテストしたいと思います。私のテストクラスはWebTestCaseです。私はstatic::createClient()を使用して運用クライアントを取得します。symfony2コントローラの機能テスト:ルートの生成方法

問題はです。私の現在のインストールでは、仮想ホストを使用して良いルートを呼び出しています。

$client->getContainer()->get('router')->generate('my_route', array(), true) localhostをホストとしてルートを生成します。しかし、私はホストとしてmyproject.localを持っているので、これはうまくいきません。

$client->getContainer()->get('kernel')->getRootDir()と他のディレクトリメソッドは、WebパスではなくLinuxファイルパスを提供します。

私はプロジェクトで一人ではないので、ハードコードすることはできません。正しいルートを取得する方法は何ですか、あるいはコントローラをテストする別の方法がありますか?

+0

なぜあなたは 'generate'メソッドの3番目の引数として' true'をを渡すのですか?本当に絶対URLが生成される必要がありますか? –

+0

はい、デフォルトのURLはlocalhostにもリンクされているためです。 コントローラをテストする別の方法が必要です。 – AlphaB

+0

Symfonyの提供されたテストクライアントを使用していませんか? –

答えて

9

テストフレームワーク(のWebTestCase)に建てられSymfony2の者のみが異なる環境でアプリケーションをテストできるように相対パスを必要とします:

$client->getContainer()->get('router')->generate('my_route', array(), false); 

symfonyはHTTPクライアントをシミュレートし、カーネルのインスタンスに対してテストは、そのために作成テスト。 Webサーバーは関与していません。あなたは、クライアントのシミュレーションは、ここでどのように機能するかについての詳細を読むことができます

http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

7

symfonyのドキュメントで述べたようにURLの変更はエンドユーザーに影響を与えるとで何したいカバーのthatsますので、あなたは、絶対URLを使用する必要がありますあなたの機能テストも。

"テストでは、symfonyルータを使用してURLを生成すると、エンドユーザに影響を与えるアプリケーションURLの変更は検出されません。

は、ここに詳細情報を参照してください:http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

+2

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 – serenesat

+0

こんにちは@serensatヒントのおかげで、私はポイントを参照してください。私はちょうど本質的な部分の引用を加えました。 – honzalilak

関連する問題