【发布时间】:2019-12-14 05:06:36
【问题描述】:
我最近将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);
我正在测试的功能驻留在控制器上。在我的测试中,我发布了一个通过 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”规则,这样我就可以直接访问控制器,而不必担心通过验证。
【问题讨论】:
-
见laravel.com/docs/5.8/mocking。这可能需要一点点挖掘,但模拟您的验证器正在进行的特定 API 调用将意味着您仍然可以对 FormRequest 使用自动化测试。
-
我已经读过了,我不确定从哪里开始。值得注意的是,我是比较新的 Laravel。
-
也许this post 会帮助您入门?如果您无法弄清楚,我可以建议发布有问题的验证代码以及调用它的上下文吗?
-
@PtrTon 我已经更新了我的问题以添加更多上下文。