我正在构建一个小型 Laravel 应用程序,我想使用 phpunit 对其进行测试。是一个非常简单的应用程序,只有一个 Controller :
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use GuzzleHttp\Client;
class MyController extends Controller
{
protected $client;
public function __construct(Client $client)
{
$this->client = $client;
}
public function doSomething(Request $request)
{
...
$this->client->post(...);
...
}
}
因此,如您所见,我在 Controller 中传递了 Guzzle 对象(我的想法是用 mock handler 替换该客户端。我想测试函数 doSomething 是否正在执行我期望的操作,但我不知道怎么调用它。
我可以很容易地(在我的 MyControllerTest 中)做类似的事情:
$controller = new MyController($fakeGuzzleObject);
但是,我怎样才能调用 doSomething 并传递一个 Request 实例呢?
或者我可以做类似的事情:
$this->get(route/to/access/doSomething)
让 Laravel 注入(inject)请求,但我如何告诉它使用模拟的 Guzzle 实例?
最佳答案
这两个选项都非常简单。
第一个选项:
你可以像 $controller->doSomething(new
请求(['数据'=>'数据']))
第二个选项:
如果您执行 $this->get(...)
并希望将自定义类注入(inject)到构造函数中,只需绑定(bind)它即可:
$this->app->bind(\GuzzleHttp\Client::class, function () {
$client = new GuzzleHttp\Client();
});
我建议使用第二个选项。
关于Phpunit 测试 Laravel Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47612192/