You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Dusk测试:如何正确使用内存数据库?

Laravel Dusk内存数据库不生效?试试这几个排查步骤

我之前做Dusk测试的时候也踩过这个坑,明明配置了内存数据库,但浏览器还是显示本地库的数据。下面是几个最可能的原因和解决办法:

1. 先确认.env.dusk.local的数据库配置完全正确

必须确保你的配置是SQLite内存库,而且要删掉/注释掉多余的干扰项:

# 只保留这些必要的SQLite配置,其他DB_开头的变量请注释或删除
DB_CONNECTION=sqlite
DB_DATABASE=:memory:
DB_FOREIGN_KEYS=true

如果还留着DB_HOST、DB_PORT这类MySQL相关变量,Laravel可能会优先走错误的数据库连接。

2. 确保测试类继承的是DuskTestCase

普通的TestCase不会加载Dusk的环境配置,你的测试类头部应该是这样:

use Laravel\Dusk\TestCase as BaseTestCase;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;

class OrderDisplayTest extends BaseTestCase
{
    // ... 测试代码
}

另外检查DuskTestCase里的prepare方法,确保迁移是在内存数据库上执行的:

protected function prepare()
{
    if (! static::$prepared) {
        static::$prepared = true;

        // 这个migrate:fresh会作用在内存数据库上
        $this->artisan('migrate:fresh');
    }
}

3. 清理缓存!这是最容易忽略的点

如果之前运行过php artisan config:cache,或者Dusk有旧缓存,它会直接用缓存的配置,完全无视.env.dusk.local。执行这两条命令清缓存:

php artisan config:clear --env=dusk.local
php artisan dusk:clear

4. 测试数据必须写到内存数据库里

你预期显示'Order ABC',那一定要在测试方法内部创建这条数据,绝对不能依赖本地库的现有数据:

public function testOrderPageDisplaysTestData()
{
    // 这里创建的订单会存在内存数据库里
    \App\Models\Order::factory()->create(['name' => 'Order ABC']);

    $this->browse(function (Browser $browser) {
        $browser->visit('/orders')
                ->assertSee('Order ABC');
    });
}

如果你的测试数据是提前在本地库创建的,浏览器自然会显示本地的内容。

5. 别手动启动本地服务器

如果你手动跑了php artisan serve,Dusk会默认连接到这个服务器,而这个服务器用的是普通的.env配置,不是Dusk的环境。测试的时候让Dusk自己启动服务器就好,它会自动加载.env.dusk.local的配置。

6. 检查config/database.php的SQLite配置

确保SQLite的配置能正确读取环境变量:

'sqlite' => [
    'driver' => 'sqlite',
    'database' => env('DB_DATABASE', database_path('database.sqlite')),
    'prefix' => '',
    'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],

这里DB_DATABASE要能正确获取到:memory:,如果硬编码成了database.sqlite,那肯定会用本地文件库。

按上面的步骤排查下来,基本就能解决问题了。我当时就是因为忘了清缓存,折腾了好半天😂

内容的提问来源于stack exchange,提问作者Hiroki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:19:02