今天會再與大家介紹幾個資料庫 Assertion 函數,與陣列 Assertion 函數。
與前一篇一樣,以下會提到的資料庫 Assertion 函數,並非 PHPUnit 內建,而是由 Laravel 所擴充,因此需注意是否有確實引用到 use Tests\\TestCase
。最後面介紹的2個陣列 Assertion 函數,則是PHPUnit內建的。
在介紹資料庫 Assertion 函數前,要先請大家在根目錄下的 phpunit.xml
的 <php>
標籤內,加入以下 <env>
子標籤:
<php>
<-- ...前略...-> <env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<-- ...後略...-></php>
這2個設定值,會在執行PHPUnit測試時,暫時使用 phpunit.xml
內 <env>
所設定的資料庫環境變數值,以避免改變到實際資料庫的資料。同時,在資料庫 Assertion 函數的實作範例中,皆會使用到 Illuminate\\Foundation\\Testing\\RefreshDatabase
這個 Trait,惟今天的內文中僅會展示如何使用它,之後會再安排篇幅與大家分享,請大家拭目以待。
讓讓我們看看吧!
assertDatabaseCount
assertDatabaseCount($table, int $count, $connection = null)
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class DatabaseTest extends TestCase{
use RefreshDatabase;
/** * Example for assertDatabaseCount() * @return void */
public function testAssertDatabaseCount() {
// 假設 users 資料表中有1筆資料,則以下 Assestion 將通過測試
$this->assertDatabaseCount('users', 1);
}}
assertDatabaseHas
assertDatabaseHas($table, array $data, $connection = null)
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class DatabaseTest extends TestCase{
use RefreshDatabase;
/** * Example for assertDatabaseHas() * @return void */
public function testAssertDatabaseHas() {
// 假設 users 資料表中至少有1筆資料
// 其 email 欄位值為 [email protected]
// 則以下 Assestion 將通過測試
$this->assertDatabaseHas('users', [
'email' => '[email protected]'
]); }}
assertDatabaseMissing
assertDatabaseMissing($table, array $data, $connection = null)
不
含有指定資料結構與值之資料。與前一函數相同,當沒有指定資料庫連線時,將會使用預設資料庫連線。<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class DatabaseTest extends TestCase{
use RefreshDatabase;
/** * Example for assertDatabaseHas() * @return void */
public function testAssertDatabaseHas() {
// 假設 users 資料表中至少有1筆資料
// 其 email 欄位值為 [email protected]
// 則以下 Assestion 將通過測試
$this->assertDatabaseHas('users', [
'email' => '[email protected]'
]); }}
assertArrayHasKey
assertArrayHasKey($key, $array, string $message = '')
/** * Example for assertArrayHasKey() * @return void */
public function testAssertArrayHasKey(){
$array = ['key' => 'value'];
$this->assertArrayHasKey($array, 'key');
}
assertJsonStringEqualsJsonString
assertJsonStringEqualsJsonString(string $expectedJson, string $actualJson, string $message = '')
json_encode
,代入第2參數,並將期望的關聯式陣列結構與值,以JSON String的形式代入第1個參數。/** * Example for assertJsonStringEqualsJsonString() * @return void */
public function testAssertJsonStringEqualsJsonString(){
$array = [
'key' => 'value',
'object1' => [
'array' => [1, 2, 3,]
], ]; $this->assertJsonStringEqualsJsonString(
'{"object1":{"array":[1,2,3]},"key":"value"}',
json_encode($array)
);}
以上就是今天的介紹,到今天為止,已經學到了20+個 Assertion 函數,是不是覺得很充實呢!
下一篇我們來將這幾天學到的 Assertion 函數,實際運用到撰寫 API 自動話測試吧!
如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄