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