$this->call($destination, $parameters, 'GET');
を使用してコントローラをテストすることに関する多くのドキュメントを読んだことがありますが、これは設定されているルートに依存しているように見え、$destination
つかいます。ルートをテストせずにLaravelのコントローラを単体テストする最善の方法は
一般的にこれは問題ありませんが、ルートからコントローラにアクセスすることは単体テストには適していません。私は、ルートではなくコントローラを単体テストしたい。ルートを扱わないでユニットテストコントローラへの標準的な方法はありますか?
コントローラーを手動でインスタンス化してメソッドを呼び出すだけですか?例えば。
$controller = new MyController;
$response = $controller->someMethod($param);
$this->assertSomething($response);
はおそらく、コントローラは、ユニットがテストされるべきではない(とのみ受け入れテストを持っている)と私の要求は私のコントローラが重すぎているサインです。あなたが直接あなたの行動を呼び出すことができます
から可能な削除されました。私はララベルをよく知っているわけではありませんが、あなたが自分自身で試すことができる最初の質問です。コントローラ1をインスタンス化するだけです。 Laravelに関係するサービスコンテナがいくつかあり、コントローラがそれを利用する場合は、あなたが模擬する必要があるいくつかの共同作業者がいるかもしれませんが、TestCaseでそれをカプセル化して、よりハンサムな。しかし、テストを書くことはコードを書くことと似ていますが、それがうまくいくなら試してみる必要があります。 – hakre
コントローラをインスタンス化することはこれまでのところうまくいくように思えますが、私はそれが "ララベルのやり方"ではないと心配しています。私はLaravel'sからテストケースを拡張しています。これは自動的に "app" DICを設定します。 – dave1010
DICアプリにテストダブルを設定すると、これはおそらくテストでは問題ありません。もしそうでなければ、物事は怪物になるかもしれない。あなたはおそらくLaravel IRCのチャットでこれについて少し議論するべきです、私はこのようなフィードバックがそこに求められていると思います。そこにいる人々は、ララベルについてさらに詳しく話すことができるはずです。 – hakre