在單元測試顯示例外(Show Exception in CLI)
在 Laravel 5 做單元測試時,使用 try catch 丟出例外時,Laravel 5 會自動地將例外的錯誤訊息處理成網頁的樣式呈現,這樣的好處是在網頁中做操作發生例外狀況時,可以直接看到例外的錯誤訊息,但是在寫單元測試 (Unit test) 時,他只會將這些錯誤先記錄在 log 檔案裡面(storage/log/laravel-yyyy-mm-dd.log
),我們要看到這些錯誤的狀況必須要再另開終端機去執行 php artisan tail
去觀看這些 例外 Log 的狀況,這樣在做測試的時候是相當麻煩的。
在 Laravel 5 中所有的例外(Exception)都會被丟到 app/Exceptions/Handler.php
中的 render()
去處理
<?php
// app/Exceptions/Handler.php
class Handler extends ExceptionHandler {
/**
* Render an exception into an HTTP response.
* 將例外錯誤轉為 HTTP 回應
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
return parent::render($request, $e);
}
}
我們如果需要在 CLI 就顯示例外錯誤訊息的話,必須修改 render()
函式,而我想要保有原本在網頁做除錯的彈性,所以我在環境變數 .env
檔案中加入例外處理(Exception)顯示的開關,當有設定開啟時,才直接顯示例外訊息。
<!-- .env -->
EXCEPTION_DISPLAY_SWITCH=true
.env
設定好後,就將 render()
函式修改為這樣
<?php
// app/Exceptions/Handler.php
class Handler extends ExceptionHandler {
/**
* Render an exception into an HTTP response.
* 將例外錯誤轉為 HTTP 回應
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
// 預設不直接顯示例外訊息
$exception_display_switch = env('EXCEPTION_DISPLAY_SWITCH', false);
if ($exception_display_switch) {
throw $e;
}
return parent::render($request, $e);
}
}
這樣設定完後,也保留原本系統處理例外狀況的彈性,也可以讓我在單元測試(Unit test)中可以正常的去顯示例外訊息了!!
參考資料
KeJyun 最新新書推薦
|
|
---|---|
Laravel 是 PHP 的框架(Framework),提供了很多開發網站或 API 所需的工具及環境,經過簡單的設定就可以完成資料的處理及顯示,使開發者可以很優雅且快速的開發出各個不同的產品。本書適合有 PHP 基礎的人,但不知道要怎麼選擇框架,或者不用框架的人也能夠明白它的好處。 雖然 WordPress 也能夠架站,但如果有客製化需求,要開發各式各樣的網站,或提供 App 使用的 API,如此一來你只能選擇用框架,而 Laravel 是目前最受歡迎的。 本書將解說為什麼要使用框架,以及理解框架的優缺點後,要怎麼選擇框架,並用框架快速建構一個網站。除非必要,否則書中會避免專業技術用語,盡量使用最生活化易懂的例子及語氣,讓大家更容易進入 Laravel 的世界。 |
|
購書連結 |
|
購書連結 |