我最近添加了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);
Run Code Online (Sandbox Code Playgroud)
我正在测试的功能驻留在控制器上。在我的测试中,我使用以下规则发布了通过 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',
];
}
Run Code Online (Sandbox Code Playgroud)
我想覆盖密码上的“pwned”规则,这样我就可以访问控制器,而不必担心通过验证。
根据提供的信息,我想说您正在执行一个集成测试,该测试执行实际的网络请求。在这种情况下,我想说您的测试套件连接到第三方是很好的,因为这是“集成”的一部分。
如果您仍然喜欢模拟验证规则,您可以使用以下任一方法替换验证器swap
$mock = Mockery::mock(Validator::class);
$mock->shouldReceive('some-method')->andReturn('some-result');
Validator::swap($mock);
Run Code Online (Sandbox Code Playgroud)
或者通过替换服务容器中的实例
$mock = Mockery::mock(Validator::class);
$mock->shouldReceive('some-method')->andReturn('some-result');
App::bind($mock);
Run Code Online (Sandbox Code Playgroud)
或者,您可以模拟 Cache::remember() 调用,它是Pwned 验证规则本身的内部部分。这会导致类似的结果
Cache::shouldReceive('remember')
->once()
->andReturn(new \Illuminate\Support\Collection([]));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2109 次 |
| 最近记录: |