Laravel 5测试数据库MySQL

时间:2015-12-18 12:32:10

标签: mysql laravel-5.1

在Laravel 4中,我可以通过config/testing/database file指定测试数据库。

当然,这个文件已从Laravel 5中移除,只是为了让事情变得毫无意义。

那么,我如何在Laravel 5中设置MySQL测试数据库。

我不想使用SQLite数据库。

我会建议一些代码但是SO或Google上没有任何代码可以尝试回答这个问题。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果查看文档Testing - Test Environment,则提及您在phpunit.xml中设置环境变量

例如,您可以添加

<phpunit>
    <php>
        <env name="DB_CONNECTION" value="sqlite"/>
    </php>
</phpunit>

设置DB_CONNECTION我知道你说你不想使用SQLite,但这只是一个例子,你可以设置你通常在.env文件中设置的任何值。

有关使用PHPUnit使用环境变量的更多详细信息,请参阅Using Environment Variables to Add Flexibility to PHPUnit Tests

答案 1 :(得分:0)

您可以采用以下方法:

将您的默认数据库连接设置为&#39; testing&#39;当应用程序环境也“测试”时在您的database.php文件中:

    'default' => app()->environment() == "testing" ?
                env('DB_CONNECTION_TESTING', 'testing') :
                env('DB_CONNECTION', 'mysql'),

然后还在您的database.php文件中添加测试连接:

'testing' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST_TESTING', 'localhost'),
        'database'  => env('DB_DATABASE_TESTING', 'forge'),
        'username'  => env('DB_USERNAME_TESTING', 'forge'),
        'password'  => env('DB_PASSWORD_TESTING', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

在.env文件中,您必须添加相应的行:

DB_HOST_TESTING=localhost
DB_DATABASE_TESTING=database_testing
DB_USERNAME_TESTING=username_testing
DB_PASSWORD_TESTING=password_testing

因此,每次应用程序环境都在测试时(例如phpunit测试中就是这种情况),您的应用程序将使用测试数据库连接。

当然你也可以修改像Mark Davidson的答案中提到的phpunit.xml文件。