如何在Laravel 5中测试表单请求规则?

时间:2015-04-22 10:22:40

标签: forms unit-testing laravel testing request

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

我怎么能写一个测试来完成它?

非常感谢您的回答!

更新:更确切地说,我想编写一个单元测试来检查,例如如果格式错误的电子邮件通过验证。问题是我不知道如何使用虚假输入创建一个新的Request实例。

3 个答案:

答案 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();
    }
}