CodeIgniter4 數(shù)據(jù)庫測試

2020-08-17 17:42 更新

測試類

為了利用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....
    }
}

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

在運(yùn)行數(shù)據(jù)庫測試時,您需要提供一個可以在測試期間使用的數(shù)據(jù)庫。該框架提供了特定于CodeIgniter的工具,而不是使用PHPUnit內(nèi)置的數(shù)據(jù)庫功能。第一步是確保您已testsapp / 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);
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號