Laravel 测试用例中的自定义验证规则模拟
Laravel custom validation rule mock in a test case
我创建了一个自定义表单请求,它有这种自定义规则
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class ExampleUserRequest extends FormRequest
{
public function rules()
{
return [
'user_id' => [
'required',
Rule::exists('items_table', 'id')
->where(function ($query) use ($user_id) {
$query->where('user_id', $user_id);
}),
}),
],
];
}
}
我需要在我的测试 class 方法中对此进行模拟,否则测试用例在此验证时会失败。
我试过这样模拟。
$ruleMock = Mockery::mock(Rule::class);
$ruleMock->shouldReceive('exists')->andReturn(true);
但是没用。
您应该向您的端点发出有效请求,否则您没有在测试任何东西,
如果您的控制器实际上需要 user_id 怎么办?您将收到 500 错误。
最好使用工厂来创建一个包含您需要的一切的测试数据库,并传输有效且在您的测试数据库中的数据
我创建了一个自定义表单请求,它有这种自定义规则
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class ExampleUserRequest extends FormRequest
{
public function rules()
{
return [
'user_id' => [
'required',
Rule::exists('items_table', 'id')
->where(function ($query) use ($user_id) {
$query->where('user_id', $user_id);
}),
}),
],
];
}
}
我需要在我的测试 class 方法中对此进行模拟,否则测试用例在此验证时会失败。
我试过这样模拟。
$ruleMock = Mockery::mock(Rule::class);
$ruleMock->shouldReceive('exists')->andReturn(true);
但是没用。
您应该向您的端点发出有效请求,否则您没有在测试任何东西, 如果您的控制器实际上需要 user_id 怎么办?您将收到 500 错误。
最好使用工厂来创建一个包含您需要的一切的测试数据库,并传输有效且在您的测试数据库中的数据