我已经阅读了很多有关使用
$this->call($destination, $parameters, 'GET');
测试控制器的文档,但这似乎也依赖于正在设置的路线,并了解正确的 $destination
使用方法。
通常这是可以的,但是从路由访问控制器似乎不适合单元测试。我想对控制器进行单元测试,而不是路线。是否有一种标准方法可以在不处理路由的情况下进行unit测试控制器?
仅仅手动实例化控制器并调用方法就足够了吗?例如
$controller = new MyController;
$response = $controller->someMethod($param);
$this->assertSomething($response);
也许控制器不应该进行单元测试(并且只进行验收测试),而我的请求表明我的控制器太重了。
您可以直接调用您的操作:
$response = $this->action('GET', 'OrdersController@show', ['id' => 1]);
在 Laravel 6 中,可以直接调用任何控制器方法,如下所示:
app()->call('App\Http\Controllers\TestController@testMethod', [$param1, $param2]);
就是这样。
我在 Laravel 9 中唯一能做的事情(包括像
$request
这样的参数)是:
app()->make("App\Http\Controllers\MyController")->callAction("myAction", [$manufacturer, $request])