Laravel单元测试单独的数据库

时间:2018-07-27 11:37:02

标签: database laravel unit-testing

有人可以帮助我,我如何运行测试,但是它们将与数据库副本或虚拟数据库交互。我知道,我需要使用phpunit.xml文件,但是如何使用?请给我一个例子。

2 个答案:

答案 0 :(得分:1)

<?php

return [

    // other stuff

    'default' => env('DB_DEFAULT', 'mysql'),

    'connections' => [

        'sqlite_testing' => [
            'driver'   => 'sqlite',
            'database' => ':memory:',
            'prefix'   => '',
        ],

        'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
            'strict'    => false,
        ],

    ],

    // other stuff

];

对于控制器

public function createApplication()
    {
        putenv('DB_DEFAULT=sqlite_testing');

        $app = require __DIR__ . '/../../bootstrap/app.php';

        $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();

        return $app;
    }

    public function setUp()
    {
        parent::setUp();
        Artisan::call('migrate');
    }

    public function tearDown()
    {
        Artisan::call('migrate:reset');
        parent::tearDown();
    }

答案 1 :(得分:1)

我已经找到解决方法。

在您的config / database.php下面的mysql中添加:

'mysql_testing' => [
'driver' => 'mysql',
'host' => env('TESTING_DB_HOST', 'localhost'),
'database' => env('TESTING_DB_DATABASE', 'forge'),
'username' => env('TESTING_DB_USERNAME', 'forge'),
'password' => env('TESTING_DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],

现在在.env中添加以下值:

TESTING_DB_HOST=localhost
TESTING_DB_DATABASE=homestead_testing
TESTING_DB_USERNAME=homestead
TESTING_DB_PASSWORD=secret

现在您可以运行

php artisan migrate —database=mysql_testing

最后一件事-在app文件夹中打开phpunit.xml文件,并添加以下内容:

  <env name="DB_CONNECTION" value="mysql_testing"/>
相关问题