Configurar banco de dados de teste para testes de aceitação no Codeception (Laravel)

Estou usando o framework Codeception para executar testes de aceitação no aplicativo Laravel 5. Eu queria usar um banco de dados separado para teste para impedir que o banco de dados real fosse alterado nos testes. Eu configurei os arquivos .yml com base na documentação do Codeception. Mas o banco de dados real é afetado de qualquer maneira. Estes são meus arquivos de configuração:

/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

O realDB é o banco de dados real e é alterado após a execução do teste de aceitação. Tentei casos diferentes para limpeza no accept.suite.yml: 1) limpeza: false no módulo Laravel e limpeza: true no módulo Db 2) limpeza: true no módulo Laravel e limpeza: true no módulo Db. A documentação de codecepção diz que, para o teste de aceitação, precisamos "desativar a limpeza e usar o módulo Db para limpar os testes entre os bancos de dados". Mas o realDB muda de qualquer maneira.

Eu tentei diferentes estruturas de teste para PHP, como PHPUnit no Laravel, driver PHP Selenium, driver da Web do Facebook e, em todos os casos, o banco de dados real é afetado ao executar testes de aceitação. Como posso configurar corretamente o Codeception para evitar alterações no banco de dados?

Qualquer ajuda seria apreciada.

[UPDATE1]

Como o @TheFallen sugeriu que eu use bancos de dados diferentes para teste, altero os arquivos de configuração assim:

/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,
        ],
...

O .env.testing está localizado na raiz do aplicativo Laravel. Mas o banco de dados real (realDB) ainda é afetado e apenas o arquivo de despejo é importado no banco de dados de teste (testDB). Parece que o aplicativo não usa .env.testing. Como posso consertar isso?

Observe que uma solicitação AJAX é enviada para chamar uma função que altera os dados no banco de dados no meu teste de aceitação. Desejo reverter as transações do banco de dados feitas por solicitações AJAX.

[UPDATE2]

De acordo comDocumentação de codecepção, Os testes de aceitação serão executados no ambiente de desenvolvimento usando um servidor da Web real, para que as configurações de .env.testing não possam ser transmitidas a eles. :(

Depois de tudo o que fiz para resolver esse problema, concluo que é impossível impedir que o banco de dados real seja alterado após a execução de testes de aceitação, acionando solicitações AJAX para executar transações do banco de dados, a menos que eu altere o banco de dados padrão para testar um no arquivo .env!

Se alguém tiver uma solução melhor, compartilhe-a!

questionAnswers(2)

yourAnswerToTheQuestion