使用 phpunit.xml、.env.dusk.local 和 sqlite 内存数据库设置 Laravel 5.4 和 Dusk

Posted

技术标签:

【中文标题】使用 phpunit.xml、.env.dusk.local 和 sqlite 内存数据库设置 Laravel 5.4 和 Dusk【英文标题】:Set up Laravel 5.4 with Dusk using phpunit.xml, .env.dusk.local, and an sqlite in-memory database 【发布时间】:2017-06-13 23:16:50 【问题描述】:

标题说明了一切。我想知道如何使用内存中的 SQLite 数据库正确设置新的 Laravel 5.4 项目和 Dusk。

我可以运行测试,但出现错误:“没有这样的表:用户”

我创建了一个新的 Laravel 5.4 项目 安装 Dusk 并添加服务提供者 我正在使用来自laravel docs 的测试来测试身份验证。它已经包含 DatabaseMigrations 特征 我可以运行测试,第一个可以运行(导航到 /login 路由),但第二个尝试登录失败。

我添加了一个.env.dusk.local,其中包含

APP_ENV=local
APP_KEY=RANDOM_STRING_HERE
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://laravel54.dev

DB_CONNECTION=sqlite
DB_DATABASE=':memory:' // I've also tried just :memory: and also adding these details to the config/database.php file but to no avail

这是我正在运行的测试(直接来自the docs)

<?php

namespace Tests\Browser;

use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Chrome;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class LoginTest extends DuskTestCase

    use DatabaseMigrations;

    public function test_login_page()
    
        $user = factory(User::class)->create();

        $this->browse(function ($browser) use ($user) 
            $browser->visit('/login')
                ->type('email', $user->email)
                ->type('password', 'secret')
                ->press('Sign in')
                ->assertPathIs('/home');
        );
    

我错过了什么?

【问题讨论】:

每次测试前需要迁移 我已经在使用 DatabaseMigrations 特征了。 @Mike 你找到解决方案了吗?使用文件 ('database' => database_path('database.sqlite'), ) 将运行绿色测试,但不会运行内存:/ 测试在单独的进程中运行,因此不能使用内存数据库运行。唯一的选择是使用专用的 sqlite 数据库作为标准。 .env.dusk.local可以设置db内存。然后运行php artisan serve --env=.env.dusk.local。 (可选:启动 Chrome/Selenium)。最后运行php artisan dusk 【参考方案1】:

你不能

需要注意的重要一点是,对于这种端到端的测试,Dusk 将无法控制环境,因为它会打开一个单独的进程。内存中的 SQLite 仅存在于 Dusk 进程下,而真正的浏览器访问应用程序将不知道 Dusk 创建的数据库,因此无法在数据库中断言任何内容。

https://github.com/laravel/dusk/issues/110

https://github.com/laravel/dusk/issues/73

【讨论】:

以上是关于使用 phpunit.xml、.env.dusk.local 和 sqlite 内存数据库设置 Laravel 5.4 和 Dusk的主要内容,如果未能解决你的问题,请参考以下文章

为啥 phpunit 没有得到 phpunit.xml 中指定的正确 APP_ENV?

PHPUnit实践001--环境搭建及简单用法

在不同的操作系统上运行 PHPUnit,XML 配置文件不同

xml phpunit.xml.dist

xml phpunit.xml.dist

如何跳过 PHPunit 中的测试?