kan*_*312 10 forms testing unit-testing request laravel
我创建了一个表单请求类并定义了一堆规则.现在我想测试这些规则,看看行为是否符合我们的期望.
我怎么能写一个测试来完成它?
非常感谢你的答案!
更新:更确切地说,我想编写一个单元测试,检查例如格式错误的电子邮件是否通过验证.问题是我不知道如何用假输入创建一个新的Request实例.
Mar*_*dis 19
接受的答案同时测试授权和验证.如果要分别测试这些功能,可以执行以下操作:
测试rules():
$attributes = ['aa' => 'asd'];
$request = new MyRequest();
$rules = $request->rules();
$validator = Validator::make($attributes, $rules);
$fails = $validator->fails();
$this->assertEquals(false, $fails);
Run Code Online (Sandbox Code Playgroud)
测试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);
Run Code Online (Sandbox Code Playgroud)
您应该在基类中创建一些辅助方法以保持测试DRY.
例如,您需要在控制器函数中包含表单请求类
public function store(MyRequest $request)
Run Code Online (Sandbox Code Playgroud)
现在创建 HTML 表单并尝试用不同的值填充它。如果验证失败,那么您将在会话中收到消息,如果成功,那么您将进入控制器功能。
当单元测试时,调用 url 并将测试值添加为数组。Laravel 文档说可以这样做
$response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6660 次 |
| 最近记录: |