在 Laravel 中对控制器进行单元测试而不测试路由的最佳方法是什么

问题描述 投票:0回答:4

我已经阅读了很多有关使用

$this->call($destination, $parameters, 'GET');
测试控制器的文档,但这似乎也依赖于正在设置的路线,并了解正确的
$destination
使用方法。

通常这是可以的,但是从路由访问控制器似乎不适合单元测试。我想对控制器进行单元测试,而不是路线。是否有一种标准方法可以在不处理路由的情况下进行unit测试控制器?

仅仅手动实例化控制器并调用方法就足够了吗?例如

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

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

unit-testing laravel phpunit laravel-4
4个回答
13
投票

您可以直接调用您的操作:

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

10
投票

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


2
投票

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

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

就是这样。


0
投票

我在 Laravel 9 中唯一能做的事情(包括像

$request
这样的参数)是:

app()->make("App\Http\Controllers\MyController")->callAction("myAction", [$manufacturer, $request])
© www.soinside.com 2019 - 2024. All rights reserved.