首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Laravel 5中测试表单请求规则?

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

Stack Overflow用户
提问于 2015-04-22 10:22:40
回答 3查看 8.7K关注 0票数 12

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

我怎么能写一个测试来完成这个任务呢?

非常感谢您的回答!

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-22 11:18:22

例如,您需要在控制器函数中拥有表单请求类。

代码语言:javascript
复制
public function store(MyRequest $request)

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

当单元测试时,然后调用url并将用于测试的值添加为数组。Laravel说这可以作为

代码语言:javascript
复制
$response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content);
票数 2
EN

Stack Overflow用户

发布于 2015-12-21 21:28:18

接受的答案同时测试授权和验证。如果您想单独测试这些函数,那么可以这样做:

测试rules()

代码语言:javascript
复制
$attributes = ['aa' => 'asd'];
$request = new MyRequest();
$rules = $request->rules();
$validator = Validator::make($attributes, $rules);
$fails = $validator->fails();
$this->assertEquals(false, $fails);

测试authorize()

代码语言:javascript
复制
$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);

您应该在基类中创建一些助手方法,以使测试保持干燥。

票数 22
EN

Stack Overflow用户

发布于 2021-04-07 15:46:40

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

代码语言:javascript
复制
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();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29794549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档