如何在运行单元测试时更改请求标头“Host”?

问题描述 投票:0回答:2

在运行单元测试时尝试更改请求标头“Host”值,但它被更改回 phpunit.xml 中定义的原始值

有没有一种方法可以仅在一次测试中覆盖此值?

/**
 * Throw an exception if host value is not matching
 * trusted host patterns.
 * @group debug
 */
public function testErrorReturnedOnUnmatchedHostValue()
{
    $this->withHeaders([
        'Host' => 'http://google.com',
    
    ])
        ->get('/')
        ->assertStatus(500);
}

我尝试过以下方法:

  • 使用 putenv('APP_URL=http://google.com') 更改环境变量
  • 尝试在 setUp() 方法中设置标题

但是该值会更改回原始 url(在 .env 中定义)。

有任何想法吗?

laravel unit-testing phpunit
2个回答
0
投票

更改主机标头的方法是将域本身添加到 URI。

$response = $this->get("http://google.com/");

您可能也想有一条路线来测试一下?以下是我通过使用 faker 添加随机域将其发挥到极致的方法。

$domain = $this->faker->domainName;
Route::domain($domain)->get('/ping', function() {
    return 'pong';
});
$response = $this->get("http://$domain/ping");

0
投票

无法通过

HOST
设置
withHeaders
,并且无法使用
HTTP_HOST
设置
withServerVariables
。但是,您可以使用
URL
外观来设置它,然后在测试结束时将其设置回来。以下是片段,请随意放置在测试/设置/拆卸中:

$original_url = URL::current();
URL::forceRootUrl('http://my.domain.com');
... call $this->get/post etc
URL::forceRootUrl($original_url);
© www.soinside.com 2019 - 2024. All rights reserved.