14

を使用してコントローラーをテストすることに関する多くのドキュメントを読みまし$this->call($destination, $parameters, 'GET');たが、これは設定されているルートにも依存しているようで、$destination使用する権利を知っています。

通常はこれで問題ありませんが、ルートからコントローラーにアクセスすることは単体テストには適していないようです。ルートではなく、コントローラーを単体テストしたい。ルートを扱わずにコントローラを単体テストする標準的な方法はありますか?

コントローラーを手動でインスタンス化し、メソッドを呼び出すだけで十分ですか? 例えば

$controller = new MyController;
$response = $controller->someMethod($param);
$this->assertSomething($response);

おそらく、コントローラーは単体テストを行うべきではなく (受け入れテストのみを行うべきです)、私の要求はコントローラーが重すぎるという兆候です。

4

3 に答える 3

13

アクションを直接呼び出すことができます。

$response = $this->action('GET', 'OrdersController@show', ['id' => 1]);
于 2013-09-27T13:57:27.287 に答える