前言
本文為參考《Laravel 5 中的 TDD 觀念與實戰》一書的學習筆記。
環境
- Windows 10
- Homestead 7.4.1
測試控制器
新增 PostController
和 index
視圖。
1 | php artisan make:controller PostController |
在 PostController
加入 index()
方法。
1 | public function index() |
新增 tests/Feature/PostControllerTest.php
測試類別。
1 | public function testPostList() |
執行測試。
1 | phpunit # 失敗 |
新增路由
新增一個資源路由。
1 | Route::resource('posts', 'PostController'); |
執行測試。
1 | phpunit // 成功 |
注入資源庫
調用 PostRepository
資源庫。
1 | use App\Repositories\PostRepository; |
透過建構子注入依賴。
1 | protected $repository; |
修改 index()
方法為:
1 | public function index() |
執行測試。
1 | phpunit // 失敗 |
隔離資源庫
安裝 Mockery
套件。
1 | composer require mockery/mockery --dev |
- 不讓控制器測試接觸資料庫。
- 利用
Mockery
透過資源庫生成假物件。 - 利用服務容器注入假物件取代原本應該被呼叫的物件。
- 讓假物件的方法回傳假値。
在 PostControllerTest
調用 Mockery。
1 | use Mockery; |
新增 setUp()
方法以開始測試。
1 | protected $repositoryMock = null; |
修改 testPostList()
方法為以下:
1 | public function testPostList() |
新增 tearDown()
方法以結束測試。
1 | public function tearDown() |
執行測試。
1 | phpunit # 成功 |
新增 testCreatePostSuccess()
方法以測試新增文章。
1 | public function testCreatePostSuccess() |
執行測試。
1 | phpunit # 失敗 |
回到 PostController
新增 store
方法以儲存資料並導向 /posts
網址。
1 | public function store(Request $request) |
執行測試。
1 | phpunit # 成功 |