Spec-Zone.ru › CodeIgniter 4

Тестирование вашей базы данных

  • Класс теста
  • Настройка тестовой базы данных
    • Миграции и семена
  • Вспомогательные методы

Класс теста

Для использования встроенных инструментов базы данных CodeIgniter для тестирования, ваши тесты должны расширять CIUnitTestCase и использовать DatabaseTestTrait.

<?php

namespace App\Database;

use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Test\DatabaseTestTrait;

class MyTests extends CIUnitTestCase
{
    use DatabaseTestTrait;

    // ...
}

Поскольку специальная функциональность выполняется во время фаз setUp() и tearDown(), вы должны убедиться, что вызываете методы родительского класса, если вам необходимо использовать эти методы, в противном случае вы потеряете большую часть описанной здесь функциональности:

<?php

namespace App\Database;

use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Test\DatabaseTestTrait;

class MyTests extends CIUnitTestCase
{
    use DatabaseTestTrait;

    public function setUp()
    {
        parent::setUp();

        // Do something here....
    }

    public function tearDown()
    {
        parent::tearDown();

        // Do something here....
    }
}

Настройка тестовой базы данных

При выполнении тестов базы данных вам необходимо предоставить базу данных, которая может быть использована во время тестирования. Вместо использования встроенных функций базы данных PHPUnit, фреймворк предоставляет инструменты, специфичные для CodeIgniter. Первым шагом является обеспечение настройки группы баз данных tests в файле app/Config/Database.php. Это задаёт соединение с базой данных, используемое только при выполнении тестов, для защиты ваших других данных.

Если у вас несколько разработчиков в команде, вы, вероятно, захотите хранить ваши учетные данные в файле .env. Для этого отредактируйте файл, чтобы убедиться, что следующие строки присутствуют и содержат правильную информацию:

database.tests.dbdriver = 'MySQLi';
database.tests.username = 'root';
database.tests.password = '';
database.tests.database = '';

Миграции и семена

При выполнении тестов необходимо убедиться, что ваша база данных имеет правильную схему и находится в известном состоянии для каждого теста. Вы можете использовать миграции и семена для настройки базы данных, добавив пару свойств класса в свой тест.

<?php

namespace App\Database;

use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Test\DatabaseTestTrait;

class MyTests extends CIUnitTestCase
{
    use DatabaseTestTrait;

    protected $refresh  = true;
    protected $seed     = 'TestSeeder';
    protected $basePath = 'path/to/database/files';
}

$migrate

Это логическое значение определяет, выполняется ли миграция базы данных перед тестом. По умолчанию база данных всегда мигрируется в последнее доступное состояние, как определено в $namespace. Если false, миграция никогда не выполняется. Если вы хотите отключить миграцию, установите значение false.

$migrateOnce

Это логическое значение определяет, выполняется ли миграция базы данных только один раз. Если вы хотите выполнить миграцию один раз перед первым тестом, установите значение true. Если отсутствует или имеет значение false, миграция выполняется перед каждым тестом.

$refresh

Это логическое значение определяет, полностью ли обновляется база данных перед тестом. Если true, все миграции откатываются до версии 0.

$seed

Если присутствует и не пусто, это указывает имя файла семени, используемого для заполнения базы данных тестовыми данными перед запуском теста.

$seedOnce

Это логическое значение определяет, выполняется ли посев базы данных только один раз. Если вы хотите выполнить посев базы данных один раз перед первым тестом, установите значение true. Если отсутствует или имеет значение false, посев базы данных выполняется перед каждым тестом.

$basePath

По умолчанию CodeIgniter будет искать в tests/_support/Database/Seeds, чтобы найти семена, которые должны быть выполнены во время тестирования. Вы можете изменить этот каталог, указав свойство $basePath. Это не должно включать каталог Seeds, а только путь к каталогу, содержащему подкаталог.

$namespace

По умолчанию CodeIgniter будет искать в tests/_support/Database/Migrations, чтобы найти миграции, которые должны быть выполнены во время тестирования. Вы можете изменить это расположение, указав новый namespace в свойствах $namespace. Это не должно включать под-namespace Database\Migrations, а только базовый namespace. Для запуска миграций из всех доступных namespaces установите это свойство в значение null.

Вспомогательные методы

Класс DatabaseTestTrait предоставляет несколько вспомогательных методов для помощи в тестировании вашей базы данных.

regressDatabase()

Вызывается во время $refresh, описанном выше. Этот метод доступен, если вам нужно вручную сбросить базу данных.

migrateDatabase()

Вызывается во время setUp, этот метод доступен, если вам нужно вручную выполнить миграции.

seed($name)

Позволяет вручную загрузить семена в базу данных. Единственный параметр - имя семени для выполнения. Семена должны находиться в пути, указанном в $basePath.

dontSeeInDatabase($table, $criteria)

Утверждает, что строка с критериями, соответствующими парам ключ/значение в $criteria, НЕ существует в базе данных.

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

seeInDatabase($table, $criteria)

Утверждает, что строка с критериями, соответствующими парам ключ/значение в $criteria, существует в базе данных.

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

grabFromDatabase($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);

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/testing/database.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API