iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
0

今天讓我們從簡單的開始,來修改網站的首頁。

題目

  • 預計用 Laravel 完成一個留言板,會員能夠登入、發文、以及對其他人的文章留言。

要完成的細節則在接下來的每一篇文章中說明,過程則嘗試都使用 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 ,方便讀者下載後建立 .envvendor/

$ bash reinstall.sh

開始實戰

tests/ 資料夾

Laravel 的專案資料夾,預設已經有了tests/,用來放測試程式的地方,裡面又有兩個資料夾 Unit/Feature/

Unit 代表 單元測試,用來測試某個類別或個別函式的行為;Feature 則是測試我們要完成的某個功能,比較接近之前提到過的 元件測試整合測試

為什麼要有 Unit 跟 Feature 的差別呢?這裡的解釋很有趣。

Feature

垃圾桶 與 烘手機 兩者的功能都正常,但放在一起就出現悲劇了,因此不只要寫個別單元測試,也要針對要做的功能進行測試。

phpunit.xml

PHPUnit 的設定都會放在 phpunit.xml,而 Laravel 也已經寫好了許多基礎設定方便使用。

Artisan

Laravel 提供了許多 Artisan 指令,方便快速建立檔案及程式。


網站標題

就讓我們開始吧!來把網站的首頁從預設的 Laravel 字樣 改成 TDD_Blog。

目前首頁的外觀:
Title-Laravel

紅燈

利用 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 來啟動伺服器,看看目前首頁的樣子。

Title-TDD_Blog

今天先到這邊告一段落,明天繼續。


上一篇
TDD 實戰:進入 Laravel
下一篇
Laravel:消失的 visit() 函式
系列文
如何一步步實踐TDD (測試驅動開發)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
b8201032
iT邦新手 4 級 ‧ 2021-05-12 13:22:18

這laravel還真難學
把範例下載,還不見得能執行

Louis iT邦新手 5 級 ‧ 2021-06-07 10:10:10 檢舉

Larave 本身就包含了非常多功能在裡面,在撰寫這篇文章的當下 Laravel 還是在 6.0 版本,現在則已經更新到 8.x 了,可能已經有很多差異了。

我要留言

立即登入留言