我创建了一个表单请求类并定义了一堆规则。现在我想测试这些规则,看看行为是否符合我们的期望。
我怎么能写一个测试来完成它?
非常感谢您的回答!
更新:更确切地说,我想编写一个单元测试来检查,例如如果格式错误的电子邮件通过验证。问题是我不知道如何使用虚假输入创建一个新的Request实例。
答案 0 :(得分:18)
接受的答案同时测试授权和验证。如果您想分别测试这些功能,那么您可以这样做:
测试begin
spawn( "#{cmd}" )
rescue Exception
sleep 0.3
end
:
rules()
测试$attributes = ['aa' => 'asd'];
$request = new MyRequest();
$rules = $request->rules();
$validator = Validator::make($attributes, $rules);
$fails = $validator->fails();
$this->assertEquals(false, $fails);
:
authorize()
您应该在基类中创建一些辅助方法,以使测试保持DRY。
答案 1 :(得分:3)
您需要在控制器功能中使用表单请求类,例如
public function store(MyRequest $request)
现在创建HTML表单并尝试使用不同的值填充它。如果验证失败,那么你将在会话中获得消息,如果成功则进入控制器功能。
当单元测试然后调用url并将测试值添加为数组。 Laravel doc说它可以像
那样完成$response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content);
答案 2 :(得分:0)
以下是测试验证的完整示例:
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();
}
}