2012-04-05 11 views
1

私は、Doctrineのエンティティマネージャを使用してデータを取得し、ビューに渡すための単純なコントローラクラスをいくつか用意しています。ユニットテストの基本コントローラ

public function indexAction() { 
    $pages = $this->em->getRepository('Model_Page')->findAll(); 
    $this->view->pages = $pages; 
} 

正確にここでテストする必要がありますか?私はそれを保証するために、アクションにルーティングをテストすることができ

  • が適切に設定されます
  • 私は潜在的に適切なビュー変数が設定されていることをテストすることができ、これは

findAll()方法面倒です

  • はおそらくべき模擬データを使用してテストできるリポジトリ層にあることが必要ですが、これはタイプのとなり、

    という質問に戻ります
    コントローラテストの一環として、何をテストする必要がありますか?
  • 答えて

    1

    コントローラは、アプリケーションのコアロジックを保持します。単純な「インデックス」コントローラのアクションには特定の機能はありませんが、データを検証/アクティブに使用し、ビューモデルを生成するアクションは、システムの機能をほとんど備えています。

    たとえば、ログインフォームを考えます。ログインデータが投稿されるたびに、コントローラはログイン/パスワードを検証して、次のように返す必要があります。歓迎、{user}テキストを表示します。 2)ログインページに、dbにログインが見つからないことを示すメッセージが表示されます。 3)ログインページにパスワードがdbに見つかりません。

    これらの3種類の出力は、完全なテストケースを作成します。適切なアクションを使用して正しいビューモデル/ビューがクライアントに送り返されていることを検証する必要があります。

    あなたは神秘的な何かのようなコントローラを見るべきではありません。他のコードと同様にテストされています。ユーザーにビジネス価値をもたらす複雑なロジックをテストする必要があります。

    また、意味のあるテストケースを生成するために、キュウリのようなフレームワークで受け入れテストを使用することをお勧めします。

    +0

    ありがとうDmitriy。受け入れテストは、ビューで生成された出力が正しいことを確認するのに非常に役立ちます。 Behat with Minkのようなものhttp://docs.behat.org/cookbook/behat_and_mink.html#writing-your-first-web-feature – dianovich

    +0

    あなたは大歓迎です:) –

    0

    恐らくコントローラは多くの依存関係を持っているため、テストするのが最も難しいでしょう。理論的には完全に分離してテストするべきですが、すでに見てきたように、意味がありません。

    おそらく機能テストまたは受験テストから始めてください。コントローラの動作を全体的にテストします。私は以前の答えに同意する、あなたは受け入れテストツールを試してみるべきだ。しかし、キュウリはRuby用です。PHPの場合はCodeceptionを試してみてください。テストは単純で有意義です。

    また、コード化ページには、how to test sample controllersに関する記事があります。

    関連する問題