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 错误。

最好使用工厂来创建一个包含您需要的一切的测试数据库,并传输有效且在您的测试数据库中的数据