我正在尝试测试一个具有gRecaptcha:的表单
我在Laravel文档后面添加了一个模拟:
$this->mock(GoogleRecaptcha::class, function (MockInterface $mock) {
$mock->shouldReceive('isValid')->once()->andReturn(true);
});
之后,它运行post请求,但由于它似乎实际上是在从控制器运行模拟类,所以它抛出了一个错误。我以为mock不应该运行它。也许我对mock做了什么错事。
在控制器中,验证后,它运行以下代码:
if (!(new GoogleRecaptcha)->isValid()) {
abort(403, 'It seems that you are a robot');
}
GoogleRecaptcha只是App\Support文件夹中的一个类,只有一个方法:"isValid";。
无论如何,谢谢。埃尔南。
要使用laravel服务容器模拟类,必须使用依赖注入或服务位置。在这种情况下,测试失败,因为GoogleRecaptch类是使用保留字new实例化的。
更改为:
app(GoogleRecaptch::class)->isValid()
服务容器将解决此问题。