Heim  >  Artikel  >  Backend-Entwicklung  >  Laravel 单元测试中怎样运行 Request

Laravel 单元测试中怎样运行 Request

WBOY
WBOYOriginal
2016-09-02 08:57:041038Durchsuche

<code>class TestRequest()
{
    public function rules(){
        return [
            'a'=>['required','min:3'],
        ];
    }

}

//controller
public functino store(TestRequest $request)
{

}

Test.php
public function testStore()
{
    $data = [];
    $response = $this->call('POST','uri',$data);
    dd($response->getContent())
}
</code>

每次如果验证失败,使用$response->getStatusCode()总是302,这很正常。
但我想知道比如我$data['a'] = 'a',位数小于3位,想得到它的提示信息,应该怎么得到?
测试新手,麻烦大家帮我下,谢谢!

回复内容:

<code>class TestRequest()
{
    public function rules(){
        return [
            'a'=>['required','min:3'],
        ];
    }

}

//controller
public functino store(TestRequest $request)
{

}

Test.php
public function testStore()
{
    $data = [];
    $response = $this->call('POST','uri',$data);
    dd($response->getContent())
}
</code>

每次如果验证失败,使用$response->getStatusCode()总是302,这很正常。
但我想知道比如我$data['a'] = 'a',位数小于3位,想得到它的提示信息,应该怎么得到?
测试新手,麻烦大家帮我下,谢谢!

mwjmt mg

这个测试好奇怪..
如果你真要获取错误消息的话,可以使用 Session::get 。因为校验失败后会 flash 存储 errors 对象到 session 中。

比如你的情况:

<code>$response = $this->call(...);

$this->assertEquals(302, $response->getStatusCode());

dd(session('errors')->getBag('default')->first('a'));</code>

getBag获取的是一个 MessageBag 对象,可以用 get 取得所有校验错误消息,或者用 first 取得第一条错误信息。 API 文档见:http://laravel-china.org/api/...

--- 更新

一般像这种测试至少要分两部分:
首先测试 validation 校验部分,使用 Validator,例如

<code>$data = ['a' => 'b'];
$request = new MyRequest();
$rules = $request->rules();
$validator = Validator::make($attributes, $rules);
$fails = $validator->fails();
$this->assertEquals(false, $fails);</code>

然后再写测试方法测后面的逻辑。

关于 Laravel 里测试 request ,框架已经提供了很多方法来测试,可以看下 Illuminate\Foundation\Testing\Concerns\MakesHttpRequests, 这个基本已经涵盖了所有关于 request 和 response 的测试。其他部分就用别的方法测,比如测用户认证的,测cookie session的,测数据库的,测队列的等等。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn