我创建了一个表单请求类并定义了一堆规则。现在我想测试这些规则,以查看行为是否符合我们的预期。
我该如何编写测试来完成这个任务?
非常感谢您提前的答复!
更新:更准确地说,我想编写一个单元测试,检查格式不正确的电子邮件是否通过验证。问题是我不知道如何创建一个有虚假输入的 Request 实例。
我创建了一个表单请求类并定义了一堆规则。现在我想测试这些规则,以查看行为是否符合我们的预期。
我该如何编写测试来完成这个任务?
非常感谢您提前的答复!
更新:更准确地说,我想编写一个单元测试,检查格式不正确的电子邮件是否通过验证。问题是我不知道如何创建一个有虚假输入的 Request 实例。
接受的答案同时测试授权和验证。如果您想单独测试这些功能,则可以执行以下操作:
测试rules()
:
$attributes = ['aa' => 'asd'];
$request = new MyRequest();
$rules = $request->rules();
$validator = Validator::make($attributes, $rules);
$fails = $validator->fails();
$this->assertEquals(false, $fails);
测试 authorize()
:
$user = factory(User::class)->create();
$this->actingAs($user);
$request = new MyRequest();
$request->setContainer($this->app);
$attributes = ['aa' => 'asd'];
$request->initialize([], $attributes);
$this->app->instance('request', $request);
$authorized = $request->authorize();
$this->assertEquals(true, $authorized);
你应该在基类中创建一些辅助方法,以保持测试代码DRY。
Request
类中组装rules
数组),您将希望在创建Request
对象后添加此行以将$attributes
数组分配给自定义的Request
类:$request->replace($attributes);
- tmountjrValidator
。它是一个门面类,对吗? - Zacpublic function store(MyRequest $request)
现在创建HTML表单并尝试使用不同的值填充它。如果验证失败,则会在会话中获取消息,如果成功,则进入控制器函数。
进行单元测试时,请调用URL并添加测试用的值作为数组。 Laravel文档称可以这样做
$response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content);
use App\Http\Requests\PostRequest;
use Illuminate\Routing\Redirector;
use Illuminate\Validation\ValidationException;
class PostRequestTest extends TestCase
{
protected function newTestRequest($data = [])
{
$request = new PostRequest();
$request->initialize($data);
return $request
->setContainer($this->app)
->setRedirector($this->app->make(Redirector::class));
}
public function testValidationFailsWhenEmptyTitleIsGiven()
{
$this->expectException(ValidationException::class);
$this->newTestRequest(['title' => ''])->validateWhenResolved();
}
}