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 № 1Há 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:
- Corre muito rápido
- 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");