Я внедряю новое пользовательское правило проверки в форму отправки. Но я хочу обойти правило проверки в модульном тестировании. Ниже приведено упрощенное правило валидации и класс модульного тестирования. Чего мне не хватает?
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Captcha implements Rule
{
public function passes($attribute, $value)
{
// assuming will always return false in testing
// works fine when true
return false;
}
public function message()
{
return 'Captcha error! Try again later or contact site admin.';
}
}
use Tests\TestCase;
use App\Rules\Captcha;
class RegistrationTest extends TestCase {
public test_user_registration()
{
$this->mock(Captcha::class, function ($mock) {
$mock->shouldReceive('passes')->andReturn(true);
});
$response = $this->post(route('tenant.register'), [
'g-recaptcha-response' => 1,
'email' => 'user@example.com',
'password' => 'secret',
]);
$this->assertEquals(1, User::all()->count());
}
}
РЕДАКТИРОВАТЬ: также включены FormRequest
и Controller
файл
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use App\Rules\Captcha;
class NewUserRequest extends FormRequest {
public function rules()
{
return [
'name' => ['required', new Captcha]
];
}
}
...
public function postRegister(NewUserRequest $request) {
...
РЕДАКТИРОВАТЬ II: похоже на ошибку в Laravel сама;
пробовал предоставленные решения, но все еще не работает