Laravel Dusk:如何使用内存数据库进行测试

Hir*_*oki 3 php laravel laravel-dusk laravel-5.5

我一直在尝试在与Laravel Dusk一起测试时使用内存数据库。

这里有一个文件.env.dusk.local,具有以下值。

DB_CONNECTION=sqlite
DB_DATABASE=:memory:
Run Code Online (Sandbox Code Playgroud)

这是浏览器测试文件的片段。

class ViewOrderTest extends DuskTestCase
{
    use DatabaseMigrations;

    /** @test */
    public function user_can_view_their_order()
    {
        $order = factory(Order::class)->create();

        $this->browse(function (Browser $browser) use ($order) {
            $browser->visit('/orders/' . $order->id);
            $browser->assertSee('Order ABC'); //Order name
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

php artisan dusk被执行时,黄昏开始浏览器测试。

但是,Dusk似乎正在访问我的本地数据库,因为测试浏览器上有一个订单名称,该订单名称仅存在于我的本地数据库中,而“订单ABC”预计会显示在浏览器中。

根据文档,Laravel Dusk允许我们设置环境变量。

要强制Dusk在运行测试时使用其自己的环境文件,请在项目的根目录中创建一个.env.dusk。{environment}文件。例如,如果您要从本地环境启动黄昏命令,则应创建一个.env.dusk.local文件。

我不认为Dusk正在访问单独的数据库。

任何建议将被认真考虑。

小智 8

:memory:Laravel黄昏浏览器测试期间,您不能使用数据库。您的开发服务器和黄昏测试在单独的进程上运行。灰尘测试无法访问在开发服务器上运行的进程的内存。

最佳解决方案是创建sqlite文件数据库进行测试。

'sqlite_testing' => [
      'driver'   => 'sqlite',
      'database' => database_path('sqlite.testing.database'),
      'prefix'   => '',
 ],
Run Code Online (Sandbox Code Playgroud)

在数据库文件夹中创建sqlite.testing.database文件。

确保在运行测试之前运行开发服务器

php artisan serve --env dusk.local
Run Code Online (Sandbox Code Playgroud)