<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的,測資料庫的,測隊列的等等。