gpt4 book ai didi

laravel - 跳过 Laravel 的 FormRequest 验证

转载 作者:行者123 更新时间:2023-12-02 18:31:40 25 4
gpt4 key购买 nike

我最近添加了HaveIBeenPwned到我的表单请求类来检查破解的密码。鉴于这会进行外部 API 调用,有没有办法让我在测试期间完全跳过此验证规则或 FormRequest 类?

这是我在测试中提出的请求。

    $params = [
'first_name' => $this->faker->firstName(),
'last_name' => $this->faker->lastName(),
'email' => $email,
'password' => '$password',
'password_confirmation' => '$password',
'terms' => true,
'invitation' => $invitation->token
];


$response = $this->json('POST', '/register-invited', $params);

我正在测试的功能位于 Controller 上。在我的测试中,我按照以下规则发布了通过 FormRequest 传递的数据数组。

 public function rules()
{
return [
'first_name' => 'required|string|max:70',
'last_name' => 'required|string|max:70',
'email' =>
'required|email|unique:users,email|max:255|exists:invitations,email',
'password' => 'required|string|min:8|pwned|confirmed',
'is_trial_user' => 'nullable|boolean',
'terms' => 'required|boolean|accepted',
];
}

我想覆盖密码上的“pwned”规则,这样我就可以访问 Controller ,而不必担心通过验证。

最佳答案

根据所提供的信息,我想说您正在执行一个集成测试,该测试执行实际的网络请求。在这种情况下,我认为您的测试套件连接到第三方是很好的,因为这是“集成”的一部分。

如果您仍然喜欢模拟验证规则,您可以 swap out the Validator使用交换

$mock = Mockery::mock(Validator::class);
$mock->shouldReceive('some-method')->andReturn('some-result');
Validator::swap($mock);

或者通过替换服务容器中的实例

$mock = Mockery::mock(Validator::class);
$mock->shouldReceive('some-method')->andReturn('some-result');
App::bind($mock);

或者,您可以模拟 Cache::remember() 调用,它是 Pwned validation rule itself 的内部部分。 。这会导致类似的结果

Cache::shouldReceive('remember')
->once()
->andReturn(new \Illuminate\Support\Collection([]));

关于laravel - 跳过 Laravel 的 FormRequest 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57379527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com