Laravel 5:使用不同的数据库进行测试和本地化

Jam*_*rge 27 php laravel

如何更改数据库以便在本地系统上进行开发和测试而不必.env每次都编辑文件?

由于这个原因,我发现练习TDD非常不方便.

是否有可能为一个Laravel应用程序才能正常发育和测试区分,以便它可以选择合适的数据库?

小智 39

在Laravel中创建测试数据库配置

编辑config\database.php文件并testingconnections数组中添加-array :

'connections' = [
    'testing' = [
        'driver' => env('DB_TEST_DRIVER'),
        // more details on your testing database
    ]
]
Run Code Online (Sandbox Code Playgroud)

然后将必要的变量添加到您的.env-file中.

编辑PHPUnit配置

打开您的phpunit.xml-file并在<php>-tag中添加以下内容:

<env name="DB_CONNECTION" value="testing"/>

现在PHPUnit将使用您在testing-array中定义的数据库上的测试运行.


Jed*_*nch 31

对于Laravel 5.5,正确的方法是创建一个名为.env.testing的测试环境文件.在这里,您可以定义测试环境,包括您要用于测试的数据库......

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test DB
DB_USERNAME=test DB user
DB_PASSWORD=test DB password
Run Code Online (Sandbox Code Playgroud)

然后运行此命令......

php artisan config:cache --env=testing
Run Code Online (Sandbox Code Playgroud)

这会将缓存配置为.env.testing文件参数.

是文档的链接.

  • 直到我跑才工作... php artisan config:cache --env=testing (3认同)

viv*_*nov 9

如果您的测试数据库使用相同的配置但只是它的名称不同,则只能通过添加来更改所选的数据库名称

<env name="DB_DATABASE" value="testing_db_name"/>
Run Code Online (Sandbox Code Playgroud)

该文件phpunit.xml<php>节点


Inv*_*ble 5

对于那些想要使用 sqlite 进行测试的人

创建测试环境文件和test.sqlite文件

> cp .env .env.testing
> touch test.sqlite
Run Code Online (Sandbox Code Playgroud)

在 .env.testing 文件中

DB_CONNECTION=sqlite
DB_DATABASE=./test.sqlite
Run Code Online (Sandbox Code Playgroud)

其次是

php artisan config:cache --env=testing
Run Code Online (Sandbox Code Playgroud)

现在再次迁移您的数据库

php artisan migrate
Run Code Online (Sandbox Code Playgroud)

如果你需要的话,然后播种它

php artisan db:seed
Run Code Online (Sandbox Code Playgroud)

每当你想使用本地环境时,运行

php artisan config:cache --env=local
Run Code Online (Sandbox Code Playgroud)

请注意,env 名称可以在 .env 文件中找到,格式为APP_ENV=local