W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
為了利用CodeIgniter提供的用于測試的內置數據庫工具,您的測試必須擴展CIDatabaseTestCase
:
<?php namespace App\Database;
use CodeIgniter\Test\CIDatabaseTestCase;
class MyTests extends CIDatabaseTestCase
{
. . .
}
因為在setUp()
和tearDown()
階段執(zhí)行了特殊功能,所以如果需要使用父方法,則必須確保調用它們的方法,否則將丟失此處描述的許多功能:
<?php namespace App\Database;
use CodeIgniter\Test\CIDatabaseTestCase;
class MyTests extends CIDatabaseTestCase
{
public function setUp()
{
parent::setUp();
// Do something here....
}
public function tearDown()
{
parent::tearDown();
// Do something here....
}
}
在運行數據庫測試時,您需要提供一個可以在測試期間使用的數據庫。該框架提供了特定于CodeIgniter的工具,而不是使用PHPUnit內置的數據庫功能。第一步是確保您已tests
在app / Config / Database.php中設置了一個數據庫組。這指定了僅在運行測試時使用的數據庫連接,以確保其他數據的安全。
如果團隊中有多個開發(fā)人員,則可能需要將憑據存儲在.env文件中。為此,請編輯文件以確保存在以下各行并具有正確的信息:
database.tests.dbdriver = 'MySQLi';
database.tests.username = 'root';
database.tests.password = '';
database.tests.database = '';
運行測試時,您需要確保數據庫具有正確的架構設置,并且每個測試都處于已知狀態(tài)。通過向測試中添加幾個類屬性,可以使用遷移和種子設置數據庫。
<?php namespace App\Database;
use CodeIgniter\Test\CIDatabaseTestCase;
class MyTests extends\CIDatabaseTestCase
{
protected $refresh = true;
protected $seed = 'TestSeeder';
protected $basePath = 'path/to/database/files';
}
$refresh
此布爾值確定在每次測試之前是否完全刷新數據庫。如果為true,則將所有遷移回滾到版本0,然后將數據庫遷移到最新的可用遷移。
$seed
如果存在且不為空,則此參數指定種子文件的名稱,該種子文件用于在每次運行測試之前用測試數據填充數據庫。
$basePath
默認情況下,CodeIgniter將在tests / _support / Database / Seeds中查找以在測試期間運行它的種子。您可以通過指定$basePath
屬性來更改此導演。它不應該包括種子目錄,而是包含子目錄的單個目錄的路徑。
$namespace
默認情況下,CodeIgniter將在tests / _support / DatabaseTestMigrations / Database / Migrations中查找以定位在測試期間應運行的遷移。您可以通過在$namespace
屬性中指定新的名稱空間來更改此位置。這不應包括數據庫/遷移路徑,而應僅包括基本名稱空間。
該CIDatabaseTestCase類提供了一些輔助方法在測試你的數據庫,以幫助。
seed($name)
允許您將“種子”手動加載到數據庫中。唯一的參數是要運行的種子的名稱。種子必須存在于中指定的路徑中$basePath
。
dontSeeInDatabase($ table,$ criteria)
斷言$criteria
數據庫中不存在具有與鍵/值對匹配的條件的行。
$criteria = [
'email' => 'joe@example.com',
'active' => 1
];
$this->dontSeeInDatabase('users', $criteria);
seeInDatabase($ table,$ criteria)
斷言$criteria
數據庫中存在具有與DOES中的鍵/值對匹配的條件的行。
$criteria = [
'email' => 'joe@example.com',
'active' => 1
];
$this->seeInDatabase('users', $criteria);
captureFromDatabase($ table,$ column,$ criteria)
返回與$column
行匹配的指定表中的值$criteria
。如果找到多個行,它將僅針對第一行進行測試。
$username = $this->grabFromDatabase('users', 'username', ['email' => 'joe@example.com']);
hasInDatabase($ table,$ data)
在數據庫中插入新行。當前測試運行后,該行將被刪除。$data
是具有要插入表中的數據的關聯數組。
$data = [
'email' => 'joe@example.com',
'name' => 'Joe Cool'
];
$this->hasInDatabase('users', $data);
seeNumRecords($ expected,$ table,$ criteria)
斷言在數據庫中找到了許多匹配的匹配行$criteria
。
$criteria = [
'active' => 1
];
$this->seeNumRecords(2, 'users', $criteria);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: