相信很多人都已經看過 Laravel 6 自動化測試的教學,所以這邊講到自動化測試,應該已經是各位讀者意料之中的事情了。
不過,我們這次沒有在本機安裝 PHP!這下要怎麼透過 PHP 執行測試呢?
不用擔心。這個部分,Laravel Sail 已經幫我們都想好了。
我們只需要先將網路服務運作起來
./vendor/bin/sail up
然後,在另一個指令列畫面內,我們透過 sail 來幫我們執行服務裡面的 PHP
$ ./vendor/bin/sail php -v
PHP 8.1.3 (cli) (built: Feb 21 2022 14:48:58) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.3, Copyright (c) Zend Technologies
with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies
with Xdebug v3.1.2, Copyright (c) 2002-2021, by Derick Rethans
這樣,雖然我們的本機環境內,不一定有安裝 PHP,但是我們可以在服務裡面,直接執行 PHP 的指令!
用類似的邏輯,我們也可以直接運作測試
$ ./vendor/bin/sail test
PASS Tests\Unit\ExampleTest
✓ that true is true
PASS Tests\Feature\ExampleTest
✓ the application returns a successful response
Tests: 2 passed
Time: 1.09s
這邊各位讀者可以看到,我們不僅僅是透過 sail 執行測試,而且測試的說明文字比起之前,要清楚了很多!
我們先來看看 Tests\Unit\ExampleTest
測試程式的內容
<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function test_that_true_is_true()
{
$this->assertTrue(true);
}
}
這邊我們發現,函數的命名就清楚地說明了內容的意圖,並且在顯示測試結果的時候,會將原本的底線分段,改變成空白分隔文字。這樣一來,我們在閱讀測試結果的時候,就會更加清楚了。
Tests\Feature\ExampleTest
跟之前類似,判斷 /
路徑要拿到 status 為 200 的成功回傳
<?php
namespace Tests\Feature;
// use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function test_the_application_returns_a_successful_response()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
框架預設提供的自動化測試,就討論到這邊!明天我們來討論如何撰寫出我們自己的自動化測試!