Forms 如何在Laravel5中测试表单请求规则?

Forms 如何在Laravel5中测试表单请求规则?,forms,unit-testing,laravel,testing,request,Forms,Unit Testing,Laravel,Testing,Request,我创建了一个表单请求类并定义了一系列规则。现在我想测试一下这些规则,看看这些行为是否符合我们的期望 我如何编写一个测试来实现这一点 非常感谢您的回答 更新:更准确地说,我想编写一个单元测试,检查格式错误的电子邮件是否通过验证。问题是我不知道如何创建一个新的请求实例,其中包含假输入。例如,您需要在控制器函数中包含表单请求类 public function store(MyRequest $request) 现在创建HTML表单并尝试用不同的值填充它。如果验证失败,则您将在会话中获得消息,如果验证

我创建了一个表单请求类并定义了一系列规则。现在我想测试一下这些规则,看看这些行为是否符合我们的期望

我如何编写一个测试来实现这一点

非常感谢您的回答


更新:更准确地说,我想编写一个单元测试,检查格式错误的电子邮件是否通过验证。问题是我不知道如何创建一个新的请求实例,其中包含假输入。

例如,您需要在控制器函数中包含表单请求类

public function store(MyRequest $request)
现在创建HTML表单并尝试用不同的值填充它。如果验证失败,则您将在会话中获得消息,如果验证成功,则进入控制器函数

单元测试时,调用url并将测试值添加为数组。Laravel医生说这可以像

$response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content);

接受的答案同时测试授权和验证。如果要单独测试这些功能,可以执行以下操作:

测试
规则()

$attributes=['aa'=>'asd'];
$request=newmyrequest();
$rules=$request->rules();
$validator=validator::make($attributes,$rules);
$fails=$validator->fails();
$this->assertEquals(false,$fails);
测试
授权()

$user=factory(user::class)->create();
$this->actingAs($user);
$request=newmyrequest();
$request->setContainer($this->app);
$attributes=['aa'=>'asd'];
$request->initialize([],$attributes);
$this->app->instance('request',$request);
$authorized=$request->authorized();
$this->assertEquals(true,$authorized);

您应该在基类中创建一些helper方法来保持测试的干燥。

下面是测试验证的完整示例:

使用App\Http\Requests\PostRequest;
使用照明\路由\重定向器;
使用Illumb\Validation\ValidationException;
类PostRequestTest扩展了TestCase
{
受保护的函数newTestRequest($data=[])
{
$request=新的PostRequest();
$request->initialize($data);
返回$request
->setContainer($this->app)
->setRedirector($this->app->make(Redirector::class));
}
公共函数testValidationFailsWhenEmptyTitleIsGiven()
{
$this->expectException(ValidationException::class);
$this->newestRequest(['title'=>''])->validateWhenResolved();
}
}

您好,谢谢您的回答!这并不是我真正想要的:我认为我的问题写得很糟糕,所以我更新了它。我试图做的是编写一个单元测试来检查我编写的验证规则是否正确。改进了我的答案。这似乎有点做作。您不应该只关注请求对象而不依赖URI、cookies等吗?@DovBenyominSohacheski尽管这种方法是“有效的”,但绝对不是最佳实践。正如您所说,当单元测试时,除了被测试的类/函数之外的所有东西都应该被模拟/stubbed@Juan检查此链接以获得不同的解决方案:这里有一个类似的响应:可能有重复的朋友,请正确地进行单元测试,毕竟,您在这里测试的不仅仅是规则,validationData和withValidator函数也可能存在。根据验证逻辑的复杂程度(例如,如果您正在通过
请求
类中的代码组装
规则
数组),创建
请求
对象后,通过添加此行,可以将
$attributes
数组分配给自定义
请求
类:
$Request->replace($attributes)我很难理解如何在单元测试中导入
验证器。这是门面课,对吗?@Zac:是的,你说得对。您需要从Lightning\Support\Facades\Validator导入验证程序。