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

如何在Laravel Dusk测试中设置请求头以适配多语言locale测试场景

Laravel Dusk 设置请求头实现多语言测试方案

Laravel Dusk 是通过启动真实浏览器执行测试,不支持 HTTP 测试类的 withHeaders 方法,可通过以下两种方式设置请求头:

方案1:全局配置浏览器默认语言

如果所有测试用例都使用同一语言,直接修改 Dusk 驱动的 Chrome 启动参数即可,浏览器会自动携带对应 Accept-Language 请求头。
打开 tests/DuskTestCase.php 文件,修改 driver 方法的启动参数:

protected function driver()
{
    $options = (new ChromeOptions)->addArguments([
        '--disable-gpu',
        '--headless',
        '--no-sandbox',
        '--lang=en-us', // 此处设置你需要的默认语言码
    ]);

    return RemoteWebDriver::create(
        'http://localhost:9515',
        DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY,
            $options
        )
    );
}

方案2:单测试用例动态设置自定义请求头

如果不同用例需要设置不同的请求头(包括自定义头 mysite-locale),可调用 Chrome DevTools 协议动态注入请求头:

$this->browse(function (Browser $browser) {
    // 动态设置请求头
    $browser->executeChromeDevToolsMethod(
        'Network.setExtraHTTPHeaders',
        [
            'headers' => [
                'Accept-Language' => 'en-us',
                'mysite-locale' => 'en-us'
            ]
        ]
    )
    ->visit(config('app.url'))
    ->waitFor('body'); // 确保页面加载完成,服务端已写入Cookie

    $this->assertEquals($browser->plainCookie('mysite-locale'), 'en-us');
});

注意事项

  • 动态设置请求头的操作必须在调用 visit 方法前执行,才能在首次页面请求时生效
  • 如果你的服务端是异步写入 Cookie,可根据页面实际情况增加 waitFor 等等待逻辑,避免提前读取 Cookie 取不到正确值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:57:03