小编Kai*_*i D的帖子

在Laravel 5.4中设置内存中的SQLite数据库以进行测试

我正在使用Dusk为Laravel 5.4应用程序开发一套浏览器测试.其中一个测试检查是否创建了对象,并且由于这是浏览器测试,因此在单击提交按钮时,该值将保存到数据库中.显然,我不希望我的数据库变得混乱有测试数据,并且还存在一个问题,因为对象的名称必须是唯一的,因此测试将在第一次运行后失败.我认为解决这个问题的最佳方法是实现一个测试数据库,该数据库在每个测试周期结束时清除.但是我在设置它时遇到了一些问题.

目前,我的代码不会抛出任何错误,但phpunit只是不会使用测试数据库.我在研究如何实现数据库时安装了代码,但我不知道该如何处理它.这是我目前的代码:

.ENV

DB_CONNECTION=mysql
Run Code Online (Sandbox Code Playgroud)

.env.testing

APP_ENV=testing
APP_DEBUG=true
APP_KEY=this_has_a_real_key
APP_URL=http://localhost:8000

DB_CONNECTION=sqlite_testing
Run Code Online (Sandbox Code Playgroud)

为database.php

'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [

        ...

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

        ...
Run Code Online (Sandbox Code Playgroud)

phpunit.xml

<env name="DB_CONNECTION" value="sqlite_testing" />
Run Code Online (Sandbox Code Playgroud)

DuskTestCase.php

abstract class DuskTestCase extends BaseTestCase
{
    /**
     * Creates the application.
     *
     * @return \Illuminate\Foundation\Application
     */
    public function createApplication()
    {
        putenv('DB_CONNECTION=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:refresh');
        Artisan::call('migrate');
        Artisan::call('db:seed');
    } …
Run Code Online (Sandbox Code Playgroud)

php sqlite laravel laravel-5

7
推荐指数
1
解决办法
6902
查看次数

标签 统计

laravel ×1

laravel-5 ×1

php ×1

sqlite ×1