我第一天說過,我的參考用書是《Laravel: Up and Running》,這本書基本上該提的都有(這不是業配,重複,這不是業配),不過比較麻煩的是書裡使用的Laravel版本是5.3,而我是用5.5(然後Laravel最新版本是5.6)。
Laravel經過改版,有些目錄跟檔案和書中當時的情況不盡相同。5.3版的Tests目錄當時只有兩個檔案:ExampleTest.php
和TestCase.php
,現在的Tests目錄也還是有他們,不過多了點別的。
./tests/
├── CreatesApplication.php
├── Feature
│ └── ExampleTest.php
├── TestCase.php
└── Unit
└── ExampleTest.php
Well,好像不算一點。
Laravel內建支援PHPUnit,PHPUnit是PHP最常見的測試框架,讓你比較簡單的測試程式。當我們寫好test檔案後,下個phpunit
指令它就會自動幫你把所有測試跑完。
這是Unit裡面的Example,如果使用Artisan指令創建新Test檔案,也大概是長這樣:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}
有趣的是新生成的Test會在tests/Feature
資料夾而不是tests/Unit
。然後這是Feature裡面的Example:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
書裡面是測試是否拿抓取「Laravel」字樣,這邊測試的是連線。測試成功了會看到類似下圖這樣的畫面:
測試失敗就會這樣:
我知道把200改成404很蠢,不過這是範例,求別計較_(:з」∠)_
Laravel也有提供mock的工具,像是測試郵件或通知時,我們不能真的把郵件跟通知送出去,這種時候就可以使用模仿程式進行測試:)