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

Laravel Dusk+Docker+多租户:如何在companyx.localhost类子域名运行测试?

解决Laravel Sail环境下Dusk访问多租户子域名的问题

一、Docker/Sail容器配置补全

你已经给Selenium容器添加了extra_hosts,但还要确保Laravel应用容器也能解析子域名(测试代码运行在该容器内,需正确生成子域名路由):

  • 打开项目根目录的docker-compose.yml,找到services.app节点,添加extra_hosts配置:
    extra_hosts:
      - "companyx.localhost:host-gateway"
      - "laravel.test:host-gateway"
    
  • 重启Sail使配置生效:
    sail down -v && sail up -d
    

二、Laravel Dusk环境配置修正

  1. 完善.env.dusk.local的关键配置:
    APP_URL=http://companyx.localhost
    SESSION_DOMAIN=.localhost  # 允许所有localhost子域名共享会话
    APP_ENV=local
    
  2. 清除Dusk环境的配置缓存,避免旧配置干扰:
    sail artisan config:clear --env=dusk.local
    

三、Dusk测试代码的子域名适配

默认Dusk启动逻辑可能忽略自定义子域名,需在tests/DuskTestCase.php中手动指定基准访问域名:

protected function driver()
{
    $options = (new ChromeOptions)->addArguments([
        '--disable-gpu',
        '--headless=new',
        '--window-size=1920,1080',
    ]);

    return RemoteWebDriver::create(
        'http://selenium:4444/wd/hub',
        DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY, $options
        ),
        // 指定子域名作为基准URL
        'http://companyx.localhost',
        5000
    );
}

若需测试多个租户,可在测试用例中动态指定访问地址:

$this->browse(function (Browser $browser) {
    $browser->visit('http://companyx.localhost/login')
            ->type('email', 'test@companyx.com')
            ->type('password', 'password')
            ->press('Login')
            ->assertPathIs('/dashboard');
});

四、验证配置有效性

  1. 进入Selenium容器,测试子域名解析:
    sail exec selenium ping companyx.localhost
    
    能ping通则说明容器内解析正常。
  2. 进入Laravel应用容器,验证路由生成:
    sail artisan tinker --env=dusk.local
    
    在tinker中执行:
    route('tenant.dashboard', [], false, 'companyx.localhost')
    
    应返回http://companyx.localhost/dashboard,说明路由生成正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:35:13