我們終於要開始實作我們的單元測試了,
首先我們先建立一個自己的測試案例
php artisan make:test MyFirstUnitTest
我們發現在 /tests/Feature
資料夾多了一個 MyFirstUnitTest.php
檔案,
內容如下:
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class MyFirstUnitTest extends TestCase
{
/**
* A basic feature test example.
*
* @return void
*/
public function test_example()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
這個測試的內容是我們去向首頁請求,
期待能夠回傳200的Http狀態,
當然如果我們的網站沒有問題,
應該是要能夠回傳200沒有錯,
那我們就來做一下驗證
最後跑出來的結果也跟我們預期的一樣,
是綠燈(代表通過),
如果我們把原來的程式改成這樣
$response = $this->get('/');
$response->assertStatus(404);
可以預期地,
一定是會回傳錯誤,
我們再來執行看看:
真的就變成紅燈了,
錯誤訊息說
Expected status code 404 but received 200.
我們原本預期得到的狀態是404,
但是卻回傳了200,
然後還告訴我們錯誤是在哪一行,
就是在MyFirstUnitTest.php的第20行。
這樣子我們就可以透過PHPUnit來驗證我們寫的程式有沒有問題。
所以我們現在開始來撰寫自己的測試程式,
現在我們想要新增一個網頁 /getLeapYear,
我們會傳給他一個值,
然後得到一個回傳值,
目前這個網頁是不存在的,
所以應該會得到404的回傳,
我們在我的們測試類別新增一個function,
public function test_leapyear_return_200()
{
$response = $this->get('/getLeapYear');
$response->assertStatus(200);
}
原本的那個範例改回來200
public function test_example()
{
$response = $this->get('/');
$response->assertStatus(200);
}
然後執行
php vendor/phpunit/phpunit/phpunit tests/Feature/MyFirstUnitTest.php
我們來看看框框的地方
到了這裡,
我們終於成功地做了一個失敗的單元測試,
(其實嚴格說來是成功,因為我們原本預期它就是會失敗)
然後我們在web.php新增
Route::get('/getLeapYear', function() {
return true;
});
然後執行
php vendor/phpunit/phpunit/phpunit tests/Feature/MyFirstUnitTest.php
我們的第一個測試已經成功了!