其实很简单。
在您的 storage/ 文件夹上创建一个测试数据库,名称为 database.sqlite,或者如果您想要其他名称或其他位置,您必须更改 config/database.php 文件上的配置,这些是默认配置:
'sqlite' => [
'driver' => 'sqlite',
'database' => storage_path('database.sqlite'),
'prefix' => '',
],
您有两个选择,要么编辑 .env,要么只指定要运行迁移的数据库的名称:
php artisan migrate --database=sqlite
如果您更喜欢编辑 .env 文件,那么我们必须添加一个新变量:
DB_CONNECTION=sqlite
这是因为当.env 文件中没有这个变量时,Laravel 默认使用 MySQL:
//config/database.php file
'default' => env('DB_CONNECTION', 'mysql'),
现在我们的应用程序指向我们的 sqlite 数据库,我们现在可以运行我们的迁移和播种。之后,如果您只想继续运行 MySQL,请从 .env 文件中删除 DB_CONNECTION=sqlite。
现在您已经在测试数据库上进行了迁移,最后一步就是指定您的 SQLite 作为测试的默认数据库。
在您的根文件夹中有一个phpunit.xml 文件,打开它并在<php> 节点下创建一个新变量:
<env name="DB_CONNECTION" value="sqlite"/>
现在您的应用程序正在使用 MySQL,而 phpunit 正在使用 SQLite。
记住,如果您更改 .env 以将其更改回您的默认数据库;
PS
在运行迁移时要小心,如果您在迁移本身上指定了一个连接,它将尝试在该连接上运行它。
<?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');
}
}
无论您在.env 文件或迁移命令中指定什么,此迁移都将始终在连接管理上运行