Настройка тестовой базы данных для приемочных тестов в Codeception (Laravel)

Я использую среду Codeception для выполнения приемочных тестов в приложении Laravel 5. Я хотел использовать отдельную базу данных для тестирования, чтобы предотвратить изменение реальной базы данных во время тестирования. Я настроил файлы .yml на основе документации Codeception. Но на настоящую базу данных все равно влияют. Это мои файлы конфигурации:

/codeception.yml

actor: Tester
 paths:
   tests: tests
    log: tests/_output
    data: tests/_data
   support: tests/_support
   envs: tests/_envs
 settings:
   bootstrap: _bootstrap.php
   colors: true
    memory_limit: 1024M
  extensions:
  enabled:
    - Codeception\Extension\RunFailed
  modules:
  config:
     Db:
        dsn: 'mysql:host=localhost;dbname=realDB'
        user: 'root'
        password: 'secret'
        dump: 'tests/_data/dump.sql'

/tests/acceptance.suite.yml

class_name: AcceptanceTester
modules:
  enabled:
    - WebDriver:
        url: 'http://localhost:8000/'
        browser: firefox
    - Laravel5:
        part: ORM
        cleanup: false # can't wrap into transaction
     Db:
      populate: true
      cleanup: true
    - \Helper\Acceptance

RealDB - это реальная база данных, и она изменяется после выполнения приемочного теста. Я пробовал разные случаи очистки в accept.suite.yml: 1) cleanup: false в модуле Laravel и cleanup: true в модуле Db 2) cleanup: true в модуле Laravel и cleanup: true в модуле Db. В документации Codeception говорится, что для приемочного теста нам нужно «отключить очистку и использовать модуль Db для очистки базы данных между тестами». Но realDB все равно меняется.

Я пробовал разные тестовые среды для PHP, такие как PHPUnit в Laravel, драйвер PHP Selenium, веб-драйвер Facebook и во всех случаях реальная база данных влияла на выполнение приемочных тестов. Как правильно настроить Codeception, чтобы предотвратить изменения базы данных?

Любая помощь будет оценена.

[Update1]

Поскольку @TheFallen предложила использовать другую базу данных для тестирования, я изменяю файлы конфигурации следующим образом:

/codeception.yml

actor: Tester
 paths:
   tests: tests
    log: tests/_output
    data: tests/_data
   support: tests/_support
   envs: tests/_envs
 settings:
   bootstrap: _bootstrap.php
   colors: true
    memory_limit: 1024M
  extensions:
  enabled:
    - Codeception\Extension\RunFailed
  modules:
  config:
     Db:
        dsn: 'mysql:host=localhost;dbname=testDB'
        user: 'root'
        password: 'secret'
        dump: 'tests/_data/dump.sql'

/tests/acceptance.suite.yml

class_name: AcceptanceTester
modules:
  enabled:
    - WebDriver:
        url: 'http://localhost:8000/'
        browser: firefox
    - Laravel5:
        part: ORM
        environment_file: .env.testing
        cleanup: true
     Db:
      populate: true
      cleanup: true
    - \Helper\Acceptance 

/.env.testing

APPLICATION_URL=http://localhost:8000
APP_DEBUG=true
APP_ENV = testing
MYSQL_MAIN_HOST=localhost
MYSQL_MAIN_DATABASE=realDB
MYSQL_MAIN_USER=root
MYSQL_MAIN_PASSWORD=secret 
CACHE_DRIVER=array 
DB_CONNECTION=test_mysql
TEST_MYSQL_MAIN_DATABASE=testDB

/config/database.php

return [

    'fetch' => PDO::FETCH_CLASS,

    'default' => env('DB_CONNECTION', 'mysql'),

    'connections' => [

        'test_mysql' => [
            'driver'    => 'mysql',
            'host'      => env('MYSQL_MAIN_HOST', 'localhost'),
            'database'  => env('TEST_MYSQL_MAIN_DATABASE', 'testDB'),
            'username' => env('MYSQL_MAIN_USER', 'root'),
            'password' => env('MYSQL_MAIN_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],
...

.Env.testing находится в корне приложения Laravel. Но реальная база данных (realDB) по-прежнему страдает, и в тестовую базу данных (testDB) импортируется только файл дампа. Похоже, приложение не использует .env.testing. Как я могу это исправить?

Обратите внимание, что в моем приемочном тесте отправляется запрос AJAX для вызова функции, изменяющей данные в базе данных. Я хочу откатить транзакции базы данных, сделанные запросами AJAX.

[UPDATE2]

В соответствии сДокументация по кодамПриемочные тесты будут выполняться в среде разработки с использованием реального веб-сервера, поэтому настройки из .env.testing не могут быть им переданы. :(

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

Если у кого-то есть лучшее решение, поделитесь им!

Ответы на вопрос(1)

создайте один, предназначенный для ваших приемочных тестов, и настройте сервер для установки переменной среды.APP_ENV=acceptance (или как вы это называете) для этого конкретного домена. когдаAPP_ENV Laravel автоматически загрузит нужный вам файл окружения, в этом случае.env.acceptance.

Я также видел людей, использующих файлы cookie (установленные в начале приемочных тестов) для настройки Laravel для переключения баз данных на основе этих файлов cookie. Это выглядит немного грязно и потенциально небезопасно, плюс вы добавляете код в ядро ​​своего приложения, так что ...

Ваш ответ на вопрос