/ / Laravel 5.5: Testando com DatabaseMigrations exclui todas as tabelas - laravel, phpunit, laravel-5.5

Laravel 5.5: Testando com DatabaseMigrations exclui todas as tabelas - laravel, phpunit, laravel-5.5

Eu tenho me ensinado a escrever casos de teste no Laravel 5.5.

Notei que, quando eu corro uma classe de teste que tem DatabaseMigrations trait, todas as tabelas do banco de dados relevantes para a classe de teste são excluídas após a execução do teste.

Isso acontece por padrão? Eu não encontrei nenhuma pista no documento.

Qualquer conselho será apreciado.

Respostas:

3 para resposta № 1

Há sim DatabaseTransactions e DatabaseMigrations.

Com DatabaseTransactions quando você executa seu teste, ele prepara as transações, aciona o teste e rola tudo após a execução

DatabaseMigrations gatilhos php artisan migrate comando e antes que o aplicativo seja destruído, ele rola tudo de volta.

Há também RefreshDatabase que veio no Laravel 5.5, meio que substitui DatabaseMigrations e DatabaseTransactions.

Com RefreshDatabase, se você estiver usando o banco de dados na memória, ele será executado php artisan migrate para voce. Se você não estiver usando o banco de dados na memória, ele soltará todas as suas tabelas e executará uma nova php artisan migrate.

Eu sugiro que você use um banco de dados na memória, que pode ser definido como segue nas tags php do seu phpunit.xml Arquivo.

...
<php>
<env name="APP_ENV" value="testing"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
</php>

Algumas das vantagens do banco de dados na memória são as seguintes:

  1. Corre muito rápido
  2. Não afeta seu banco de dados real porque tudo acontece na memória

0 para resposta № 2

o runDatabaseMigrations() método neste traço executa migrate:rollback comando depois de executar testes. Este comando exclui todas as tabelas.

$this->artisan("migrate:rollback");