如何在Laravel 8.0中模拟课堂



我正在尝试测试一个具有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()

服务容器将解决此问题。

最新更新