在没有测试路线的情况下,在Laravel中对控制器进行单元测试的最佳方法是什么

时间:2013-09-26 13:33:40

标签: unit-testing laravel phpunit laravel-4

我已经阅读了很多关于使用$this->call($destination, $parameters, 'GET');测试控制器的文档,但这似乎依赖于正在设置的路由,并且知道要使用的$destination

通常这没关系,但是从路线访问控制器似乎不适合进行单元测试。我想对控制器进行单元测试,而不是路由。有没有标准的单元测试控制器的方法,而不处理路由?

只需手动实例化控制器并调用足够的方法吗? E.g。

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

也许控制器不应该进行单元测试(并且只进行验收测试)并且我的请求表明我的控制器太重了。

3 个答案:

答案 0 :(得分:12)

您可以直接致电:

$response = $this->action('GET', 'OrdersController@show', ['id' => 1]);

答案 1 :(得分:5)

已从Laravel 5.4 testing api

中移除action方法

答案 2 :(得分:0)

在laravel 6中,可以直接按以下方式调用任何控制器方法:

app()->call('App\Http\Controllers\TestController@testMethod', [$param1, $param2]);

就是这样。