前言
本文為參考《Laravel 5 中的 TDD 觀念與實戰》一書的學習筆記。
環境
- Windows 10
- Homestead 7.4.1
測試資源庫
新增 app/Repositories/PostRepository.php
檔。
1 2 3 4 5 6 7 8
| namespace App\Repositories;
use App\Post;
class PostRepository { }
|
建立 tests/ArticleRepositoryTest.php
測試類別。
設定 setUp()
方法以開始測試。
1 2 3 4 5 6 7 8 9 10 11 12
| protected $repository = null;
public function setUp() { parent::setUp();
$this->initDatabase();
$this->seedData();
$this->repository = new PostRepository(); }
|
新增 seedData()
方法以產生 100 筆假文章。
1 2 3 4 5 6 7 8 9 10
| protected function seedData() { for ($i = 1; $i <= 100; $i ++) { Post::create([ 'title' => 'title ' . $i, 'content' => 'content ' . $i, ]); } }
|
新增 testFetchLatestPost()
方法以測試取得最新 1 筆文章。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public function testFetchLatestPost() { $posts = $this->repository->latestPost();
$this->assertEquals(1, count($posts));
$i = 100; foreach ($posts as $post) { $this->assertEquals('title ' . $i, $post->title); $i -= 1; } }
|
設定 tearDown()
方法以結束測試。
1 2 3 4 5 6 7 8
| public function tearDown() { $this->resetDatabase();
$this->repository = null; }
|
執行測試。
回到 PostRepository
增加 latestPost()
方法。
1 2 3 4
| public function latestPost() { return Post::query()->orderBy('id', 'desc')->limit(1)->get(); }
|
執行測試。
新增 testCreatePost()
方法以測試新增文章。
1 2 3 4 5 6 7 8 9 10 11 12 13
| public function testCreatePost() { $postCount = $this->repository->postCount();
$latestId = $postCount + 1;
$post = $this->repository->create([ 'title' => 'title ' . $latestId, 'content' => 'content ' . $latestId, ]);
$this->assertEquals($postCount + 1, $post->id); }
|
執行測試。
回到 PostRepository
增加 postCount()
和 create()
方法。
1 2 3 4 5 6 7 8 9
| public function postCount() { return Post::count(); }
public function create(array $attributes) { return Post::create($attributes); }
|
執行測試。
程式碼