今天讓我們從簡單的開始,來修改網站的首頁。
要完成的細節則在接下來的每一篇文章中說明,過程則嘗試都使用 TDD 來完成,作者自己也是在一邊學習 Laravel 及練習 TDD,如果有不合邏輯的地方,都歡迎在以下留言討論。
完成的程式碼預計都會放上 Github,可以用附上的 tag 去查看每個範例的程式碼。
$ git clone https://github.com/louis222220/TDD_example_ithelp
$ cd TDD_example_ithelp
$ git checkout <tag_name>
環境的參數設定檔 .env
及 安裝的相依套件 vendor/
是不會被加入到 Git 管控中的(.gitignore)。
從 4b 開始的版本,加入了 reinstall.sh ,方便讀者下載後建立 .env
、 vendor/
。
$ bash reinstall.sh
tests/
資料夾Laravel 的專案資料夾,預設已經有了tests/
,用來放測試程式的地方,裡面又有兩個資料夾 Unit/
、Feature/
。
Unit 代表 單元測試,用來測試某個類別或個別函式的行為;Feature 則是測試我們要完成的某個功能,比較接近之前提到過的 元件測試
或 整合測試
。
為什麼要有 Unit 跟 Feature 的差別呢?這裡的解釋很有趣。
垃圾桶 與 烘手機 兩者的功能都正常,但放在一起就出現悲劇了,因此不只要寫個別單元測試,也要針對要做的功能進行測試。
PHPUnit 的設定都會放在 phpunit.xml,而 Laravel 也已經寫好了許多基礎設定方便使用。
Laravel 提供了許多 Artisan 指令,方便快速建立檔案及程式。
就讓我們開始吧!來把網站的首頁從預設的 Laravel 字樣 改成 TDD_Blog。
目前首頁的外觀:
利用 artisan 的指令來新增檔案:
$ php artisan make:test IndexTest
會在 feature/ 快速建立一個測試類別,我們對它稍做修改。
<?php
namespace Tests\Feature;
use Tests\TestCase;
class IndexTest extends TestCase
{
/**
* @return void
*/
public function testTitle()
{
$response =$this->get('/');
$response->assertSee('TDD_Blog');
}
}
此時執行 $ ./vendor/bin/phpunit
,發現錯誤訊息超長!
F 1 / 1 (100%)
Time: 188 ms, Memory: 18.00 MB
There was 1 failure:
1) Tests\Feature\IndexTest::testTitle
Failed asserting that '<!DOCTYPE html>\n
<html lang="en">\n
<head>\n
...
...
</html>\n
' contains "TDD_Blog".
$this->get('/')
會對 index /
送出請求。
assertSee()
是在這個得到的回應中,尋找是否有參數中的文字,而目前首頁並沒有 TDD_Blog 這段文字。
修改 resources/views/welcome.blade.php,將 Laravel 改成 TDD_Blog,
<div class="title m-b-md">
Laravel
</div>
<div class="title m-b-md">
TDD_Blog
</div>
( $ git checkout 4b
)
再次執行測試,發現可以通過了。
透過 $ php artisan serve
來啟動伺服器,看看目前首頁的樣子。
今天先到這邊告一段落,明天繼續。
這laravel還真難學
把範例下載,還不見得能執行
Larave 本身就包含了非常多功能在裡面,在撰寫這篇文章的當下 Laravel 還是在 6.0 版本,現在則已經更新到 8.x 了,可能已經有很多差異了。