如何在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
相关产品推荐
相关产品推荐

