php - dusk - run test laravel
Establecer SQLite como base de datos para pruebas de unidad en Laravel 5.1 (2)
En realidad es bastante simple.
Cree una base de datos de prueba en su storage/
carpeta, con el nombre database.sqlite
o si desea otro nombre u otra ubicación, debe cambiar las configuraciones en el archivo config/database.php
, estas son las configuraciones predeterminadas:
''sqlite'' => [
''driver'' => ''sqlite'',
''database'' => storage_path(''database.sqlite''),
''prefix'' => '''',
],
Tiene dos opciones, puede editar su .env
o simplemente especificar el nombre de la base de datos donde desea ejecutar sus migraciones:
php artisan migrate --database=sqlite
Si prefiere editar su archivo .env
, entonces tenemos que agregar una nueva variable:
DB_CONNECTION=sqlite
Esto se debe a que Laravel utiliza MySQL de forma predeterminada cuando esta variable está ausente en el archivo .env
:
//config/database.php file
''default'' => env(''DB_CONNECTION'', ''mysql''),
Ahora que nuestra aplicación apunta a nuestra base de datos sqlite, ahora podemos ejecutar nuestras migraciones y sembrados. Después de eso, si solo desea seguir ejecutando MySQL, elimine DB_CONNECTION=sqlite
del archivo .env
.
Ahora que tiene sus migraciones en su base de datos de prueba, el último paso es solo para especificar su SQLite como su base de datos predeterminada para las pruebas.
En su carpeta raíz tiene un archivo phpunit.xml
, ábralo y una nueva variable en el nodo <php>
:
<env name="DB_CONNECTION" value="sqlite"/>
Ahora su aplicación está utilizando MySQL y phpunit está utilizando SQLite.
Recuerde que si cambia el .env
para .env
a cambiarlo a su base de datos predeterminada;
PD
Tenga cuidado al ejecutar sus migraciones, si especificó una conexión en la migración misma, intentará ejecutarla en esa conexión.
<?php
use Illuminate/Database/Schema/Blueprint;
use Illuminate/Database/Migrations/Migration;
class AdminUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection(''manage'')->create(''admin_users'', function (Blueprint $t) {
$t->increments(''id'');
$t->string(''name'');
$t->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection(''manage'')->dropIfExists(''admin_users'');
}
}
Esta migración siempre se ejecutará en la administración de la conexión sin importar lo que especifique en el archivo .env
o en el comando de migración
Estoy tratando de configurar las pruebas unitarias en Laravel 5.1. Siguiendo la documentation veo esto:
Laravel está construido con pruebas en mente. De hecho, el soporte para las pruebas con PHPUnit se incluye de forma inmediata
y
Al ejecutar pruebas, Laravel configurará automáticamente el entorno de configuración para la prueba. Laravel configura automáticamente la sesión y la memoria caché para el controlador de matriz durante la prueba, lo que significa que no se conservarán datos de sesión o memoria caché durante la prueba.
que es impresionante Pero ... ¿cómo le digo a Laravel que use la conexión de base de datos SQLite cuando se ejecutan las pruebas?
Lo único que hay en config / database.php es este código comentado:
/* We might use this connection for unit tests
''sqlite'' => [
''driver'' => ''sqlite'',
''database'' => storage_path().''/database.sqlite'',
''prefix'' => '''',
],
*/
Podríamos usar esto :)
¿Hay alguna manera de configurar esto globalmente para todas las pruebas? ¿Necesito configurar el conector en cada caso de prueba?
Cualquier ayuda apreciada.
Tengo una solución un poco diferente. Estoy usando una base de datos sqlite de memoria.
primero cambio el valor predeterminado y luego agrego una nueva conexión a la base de datos.php en la configuración
''default'' => env(''DB_CONNECTION'', ''mysql''),
...
''testing'' => [
''driver'' => ''sqlite'',
''database'' => '':memory:'',
''prefix'' => '''',
],
Luego agrego la siguiente línea al phpunit.xml
<env name="DB_CONNECTION" value="testing"/>
Dejo el archivo .env intacto. De esa manera, la conexión de la base de datos se establecerá por defecto en ''mysql''
Aquí está el phpunit.xml completo para más claridad
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="bootstrap/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">app/</directory>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./report/" charset="UTF-8"
yui="true" highlight="false"
lowUpperBound="50" highLowerBound="80"/>
</logging>
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="testing"/>
</php>
</phpunit>