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 回答
9

action方法已从 Laravel 5.4 testing api中删除

于 2017-06-07T05:29:40.917 回答
1

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

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

就是这样。

于 2020-06-12T13:35:42.747 回答