首頁  >  文章  >  後端開發  >  Laravel 單元測試中如何執行 Request

Laravel 單元測試中如何執行 Request

WBOY
WBOY原創
2016-09-02 08:57:041075瀏覽

<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 ,框架已經提供了很多方法來測試,可以看下 IlluminateFoundationTestingConcernsMakesHttpRequests, 這個基本上已經涵蓋了所有關於 request 和 response 的測試。其他部分就用別的方法測,例如測用戶認證的,測cookie session的,測資料庫的,測隊列的等等。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn