CodeIgniter4 數(shù)據(jù)庫(kù)測(cè)試

2020-08-17 17:42 更新

測(cè)試類

為了利用CodeIgniter提供的用于測(cè)試的內(nèi)置數(shù)據(jù)庫(kù)工具,您的測(cè)試必須擴(kuò)展CIDatabaseTestCase

  1. <?php namespace App\Database;
  2. use CodeIgniter\Test\CIDatabaseTestCase;
  3. class MyTests extends CIDatabaseTestCase
  4. {
  5. . . .
  6. }

因?yàn)樵?code>setUp()和tearDown()階段執(zhí)行了特殊功能,所以如果需要使用父方法,則必須確保調(diào)用它們的方法,否則將丟失此處描述的許多功能:

  1. <?php namespace App\Database;
  2. use CodeIgniter\Test\CIDatabaseTestCase;
  3. class MyTests extends CIDatabaseTestCase
  4. {
  5. public function setUp()
  6. {
  7. parent::setUp();
  8. // Do something here....
  9. }
  10. public function tearDown()
  11. {
  12. parent::tearDown();
  13. // Do something here....
  14. }
  15. }

設(shè)置測(cè)試數(shù)據(jù)庫(kù)

在運(yùn)行數(shù)據(jù)庫(kù)測(cè)試時(shí),您需要提供一個(gè)可以在測(cè)試期間使用的數(shù)據(jù)庫(kù)。該框架提供了特定于CodeIgniter的工具,而不是使用PHPUnit內(nèi)置的數(shù)據(jù)庫(kù)功能。第一步是確保您已testsapp / Config / Database.php中設(shè)置了一個(gè)數(shù)據(jù)庫(kù)組。這指定了僅在運(yùn)行測(cè)試時(shí)使用的數(shù)據(jù)庫(kù)連接,以確保其他數(shù)據(jù)的安全。

如果團(tuán)隊(duì)中有多個(gè)開發(fā)人員,則可能需要將憑據(jù)存儲(chǔ)在.env文件中。為此,請(qǐng)編輯文件以確保存在以下各行并具有正確的信息:

  1. database.tests.dbdriver = 'MySQLi';
  2. database.tests.username = 'root';
  3. database.tests.password = '';
  4. database.tests.database = '';

遷移與種子

運(yùn)行測(cè)試時(shí),您需要確保數(shù)據(jù)庫(kù)具有正確的架構(gòu)設(shè)置,并且每個(gè)測(cè)試都處于已知狀態(tài)。通過向測(cè)試中添加幾個(gè)類屬性,可以使用遷移和種子設(shè)置數(shù)據(jù)庫(kù)。

  1. <?php namespace App\Database;
  2. use CodeIgniter\Test\CIDatabaseTestCase;
  3. class MyTests extends\CIDatabaseTestCase
  4. {
  5. protected $refresh = true;
  6. protected $seed = 'TestSeeder';
  7. protected $basePath = 'path/to/database/files';
  8. }

$refresh

此布爾值確定在每次測(cè)試之前是否完全刷新數(shù)據(jù)庫(kù)。如果為true,則將所有遷移回滾到版本0,然后將數(shù)據(jù)庫(kù)遷移到最新的可用遷移。

$seed

如果存在且不為空,則此參數(shù)指定種子文件的名稱,該種子文件用于在每次運(yùn)行測(cè)試之前用測(cè)試數(shù)據(jù)填充數(shù)據(jù)庫(kù)。

$basePath

默認(rèn)情況下,CodeIgniter將在tests / _support / Database / Seeds中查找以在測(cè)試期間運(yùn)行它的種子。您可以通過指定$basePath屬性來更改此導(dǎo)演。它不應(yīng)該包括種子目錄,而是包含子目錄的單個(gè)目錄的路徑。

$namespace

默認(rèn)情況下,CodeIgniter將在tests / _support / DatabaseTestMigrations / Database / Migrations中查找以定位在測(cè)試期間應(yīng)運(yùn)行的遷移。您可以通過在$namespace屬性中指定新的名稱空間來更改此位置。這不應(yīng)包括數(shù)據(jù)庫(kù)/遷移路徑,而應(yīng)僅包括基本名稱空間。

輔助方法

CIDatabaseTestCase類提供了一些輔助方法在測(cè)試你的數(shù)據(jù)庫(kù),以幫助。

seed($name)

允許您將“種子”手動(dòng)加載到數(shù)據(jù)庫(kù)中。唯一的參數(shù)是要運(yùn)行的種子的名稱。種子必須存在于中指定的路徑中$basePath。

dontSeeInDatabase($ table,$ criteria)

斷言$criteria數(shù)據(jù)庫(kù)中不存在具有與鍵/值對(duì)匹配的條件的行。

  1. $criteria = [
  2. 'email' => 'joe@example.com',
  3. 'active' => 1
  4. ];
  5. $this->dontSeeInDatabase('users', $criteria);

seeInDatabase($ table,$ criteria)

斷言$criteria數(shù)據(jù)庫(kù)中存在具有與DOES中的鍵/值對(duì)匹配的條件的行。

  1. $criteria = [
  2. 'email' => 'joe@example.com',
  3. 'active' => 1
  4. ];
  5. $this->seeInDatabase('users', $criteria);

captureFromDatabase($ table,$ column,$ criteria)

返回與$column行匹配的指定表中的值$criteria。如果找到多個(gè)行,它將僅針對(duì)第一行進(jìn)行測(cè)試。

  1. $username = $this->grabFromDatabase('users', 'username', ['email' => 'joe@example.com']);

hasInDatabase($ table,$ data)

在數(shù)據(jù)庫(kù)中插入新行。當(dāng)前測(cè)試運(yùn)行后,該行將被刪除。$data是具有要插入表中的數(shù)據(jù)的關(guān)聯(lián)數(shù)組。

  1. $data = [
  2. 'email' => 'joe@example.com',
  3. 'name' => 'Joe Cool'
  4. ];
  5. $this->hasInDatabase('users', $data);

seeNumRecords($ expected,$ table,$ criteria)

斷言在數(shù)據(jù)庫(kù)中找到了許多匹配的匹配行$criteria。

  1. $criteria = [
  2. 'active' => 1
  3. ];
  4. $this->seeNumRecords(2, 'users', $criteria);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)