我正在尝试对各种自定义FormRequest输入进行单元测试.我找到了解决方案:
建议使用该$this->call(…)方法并response使用期望值断言(链接到答案).这是过度的,因为它直接依赖于路由和控制器.
泰勒的测试,从Laravel框架 中发现的 tests/Foundation/FoundationFormRequestTest.php.那里有很多嘲弄和开销.
我正在寻找一种解决方案,我可以根据规则对各个字段输入进行单元测试(独立于同一请求中的其他字段).
SampleRequest示例:
public function rules()
{
return [
'first_name' => 'required|between:2,50|alpha',
'last_name' => 'required|between:2,50|alpha',
'email' => 'required|email|unique:users,email',
'username' => 'required|between:6,50|alpha_num|unique:users,username',
'password' => 'required|between:8,50|alpha_num|confirmed',
];
}
Run Code Online (Sandbox Code Playgroud)
期望的测试:
public function testFirstNameField()
{
// assertFalse, required
// ...
// assertTrue, required
// ...
// assertFalse, between
// ...
}
public function testLastNameField()
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我如何单独测试(断言)每个字段的每个验证规则?
这是我的表单请求代码,我想在验证成功后添加新变量,这样我就可以在我的控制器上访问该变量:
class CouponRequest extends Request
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'start_year' => 'required',
'start_month' => 'required',
'start_day' => 'required',
'start_time' => 'required',
'finish_year' => 'required',
'finish_month' => 'required',
'finish_day' => 'required',
'finish_time' => 'required',
];
}
public function afterValidation()
{
$this->start_date = Carbon::create( $this->start_year, $this->start_month, $this->start_day );
}
}
Run Code Online (Sandbox Code Playgroud)
所以在验证没有错误后,我可以在我的控制器上调用这个实例:
$request->start_date;
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?
当我在 Laravel 5.5 上使用表单请求验证时,这很奇怪,我所有的发布请求都将是 405 不允许的方法,但是当我使用标准验证时变得正常,这里我的代码是:
php工匠路线:列出值
+--------+----------+----------------------------------------+--------------------+-----------------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+----------------------------------------+--------------------+-----------------------------------------------------------+------------+
| | POST | api/register | | App\Http\Controllers\AuthController@register | api |
+--------+----------+----------------------------------------+--------------------+-----------------------------------------------------------+------------+
Run Code Online (Sandbox Code Playgroud)
请求使用失眠:

我失眠时的 base_api 值为http://mylocal.app/api
错误信息:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
Run Code Online (Sandbox Code Playgroud)
路由器(api.php):
Route::post('register', 'AuthController@register');
Run Code Online (Sandbox Code Playgroud)
控制器(AuthController.php):
use App\Http\Requests\StoreRegistration;
public function register(StoreRegistration $request)
{
$email = $request->email;
$name = $request->name;
$password = $request->password;
$user = User::create([
'name' => $name,
'email' => $email, …Run Code Online (Sandbox Code Playgroud)