gpt4 book ai didi

php - 在 Laravel Dusk 测试中模拟 HTTP_REFERER?

转载 作者:可可西里 更新时间:2023-10-31 23:00:43 25 4
gpt4 key购买 nike

有没有一种直接的方法可以在 Dusk 测试中模拟 HTTP_REFERER?我正在使用 Laravel\Dusk\Browser 并在各个页面上调用 visit() 方法。这是使用 Selenium 驱动程序。


类似于下面的setReferer:

namespace Example\Tests\Browser\Processes\PublicSite;

class SampleBrowser extends Browser {
use MakesAssertions, ProvidesAdditionalBrowserActions, WaitsForElements;
public function __construct(RemoteWebDriver $driver, $resolver = null)
{
parent::__construct($driver, new ElementResolver($driver,
$resolver->prefix ?? 'body'));
}
}


class SampleTestCase extends BrowserTestCase
{
/**
* Test that the deal builder modal shows up.
*/
public function testRefererRendering()
{
$this->browse(function (SampleBrowser $browser) {
$browser
// this is the bit that I want
->setReferer('https://example.org/')
->visit('/')
->waitForLocation('/?came_via=example.org')
->assertCookieValue('came_via', 'example.org');
});
}
}

最佳答案

Dusk 或任何浏览器/Selenium 测试解决方案都没有实现这种功能,而且它们似乎永远不会实现。

参见 https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/2047

选项 1

导航到 referer URL,然后注入(inject)一个脚本,使页面导航到您要测试的页面。

选项 2

使用代理服务器拦截请求并将 referer 设置为您想要的

https://github.com/j-bennet/selenium-referer

选项 3

如果您正在尝试测试服务器端代码的行为,您始终可以在不使用浏览器完全模拟客户端的情况下对其进行测试。

例如:

<?php

namespace App\Http\Controllers;

use \Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class HomeController extends Controller
{
public function home(Request $request)
{
$referer = $request->header('Referer');
if ($referer) {
return redirect()->route('home', ['came_via' => $referer]);
}
return view('welcome');
}
}

和测试用例

<?php

namespace Tests\Feature;

use Tests\TestCase;

class RedirectTest extends TestCase
{
/**
* A basic redirect example.
*
* @return void
*/
public function testRedirection()
{
// Normal request
$response = $this->get('/');
$response->assertStatus(200);

// Referer check redirection
$referer = 'http://google.com';
$response = $this->call('GET', '/', [], [], [], ['HTTP_REFERER' => $referer]);
$response->assertRedirect('/?came_via=' . urlencode($referer));
}
}

结果

OK (2 tests, 4 assertions)

关于php - 在 Laravel Dusk 测试中模拟 HTTP_REFERER?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55107164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com