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

Homestead环境下Laravel Dusk与工厂、迁移协同异常问题

解决Laravel Dusk测试中users表不存在&用户登录失败的问题

我之前在Homestead环境里用Dusk做测试时也踩过几乎一模一样的坑,咱们一步步来排查解决:

1. 先确认Dusk的环境配置是否真的生效

首先检查你的.env.dusk.local文件,数据库配置必须和Homestead的测试数据库匹配,比如:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead_dusk_test  # 这里要和你准备的测试库一致,别用主库
DB_USERNAME=homestead
DB_PASSWORD=secret

然后一定要清除配置缓存,不然Dusk可能还是加载旧的配置:

php artisan config:clear

你可以在测试类里加个临时输出,验证当前连接的数据库:

use Illuminate\Support\Facades\DB;

// 在测试方法开头加
dd(DB::connection()->getDatabaseName());

运行测试后看输出的数据库名是不是你在.env.dusk.local里配置的那个,如果不是,说明环境配置没加载成功。

2. 让Dusk自动执行数据库迁移(最关键的一步)

你说Dusk没执行迁移,那大概率是没在测试流程里触发迁移。Laravel提供了RefreshDatabase trait,能帮你在每次测试前自动刷新数据库并执行迁移,非常省心:

<?php

namespace Tests\Browser;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
use App\Models\User;

class LoginTest extends DuskTestCase
{
    use RefreshDatabase; // 引入这个trait

    public function test_login()
    {
        // 用工厂在测试数据库创建用户
        $user = User::factory()->create([
            'email' => 'test@example.com',
            'password' => bcrypt('password123'),
        ]);

        $this->browse(function (Browser $browser) use ($user) {
            $browser->visit('/login')
                    ->type('email', $user->email)
                    ->type('password', 'password123')
                    ->press('Login')
                    ->assertPathIs('/dashboard');
        });
    }
}

这个trait会自动帮你处理测试数据库的迁移,不用手动执行migrate命令。

3. 手动验证测试数据库状态(排查兜底方案)

如果上面的方法还是不行,你可以登录Homestead服务器,直接检查测试数据库:

# 登录Homestead
vagrant ssh

# 连接MySQL
mysql -u homestead -psecret

# 切换到测试数据库
use homestead_dusk_test; # 换成你的测试库名

# 查看表是否存在
show tables;

如果没有users表,那手动执行一次Dusk环境的迁移:

php artisan migrate --env=dusk.local

执行完再看表是否出现,然后重新运行测试。

4. 清除Dusk缓存

有时候Dusk的缓存也会导致奇怪的问题,执行以下命令清除:

php artisan dusk:clear

最后再注意一个细节

工厂创建用户时,一定要确保是在测试方法里创建,而不是在测试类的构造函数或者其他地方,这样才能保证用户是创建在Dusk使用的测试数据库里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:44:20