首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置内存中的SQLite数据库以便在Laravel5.4中进行测试

问设置内存中的SQLite数据库以便在Laravel5.4中进行测试
EN

Stack Overflow用户
提问于 2017-06-21 21:24:37
回答 1查看 9.2K关注 0票数 8

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

目前,我的代码没有抛出任何错误,但phpunit不会使用测试数据库。我在研究如何实现数据库时安装了codeception,但我不确定如何处理它。这是我目前拥有的代码:

.env

代码语言:javascript
复制
DB_CONNECTION=mysql

.env.testing

代码语言:javascript
复制
APP_ENV=testing
APP_DEBUG=true
APP_KEY=this_has_a_real_key
APP_URL=http://localhost:8000

DB_CONNECTION=sqlite_testing

database.php

代码语言:javascript
复制
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [

        ...

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

        ...

phpunit.xml

代码语言:javascript
复制
<env name="DB_CONNECTION" value="sqlite_testing" />

DuskTestCase.php

代码语言:javascript
复制
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');
    }

        /**
     * Prepare for Dusk test execution.
     *
     * @beforeClass
     * @return void
     */
    public static function prepare()
    {
        static::startChromeDriver();
    }

    /**
     * Create the RemoteWebDriver instance.
     *
     * @return \Facebook\WebDriver\Remote\RemoteWebDriver
     */
    protected function driver()
    {
        return RemoteWebDriver::create(
            'http://localhost:9515', DesiredCapabilities::chrome()
        );
    }


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

}

DuskTestCase和.env.testing是完整显示的,其他部分是相关的。如何修改此代码以使phpunit识别并使用我的sqlite_testing数据库?

EN

回答 1

Stack Overflow用户

发布于 2017-08-25 04:15:55

这是因为你的配置被缓存了。

使用php artisan config:clear清除配置缓存

现在phpunit将读取xml文件。

永远不要在开发环境中缓存您的配置;)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44677477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档