Laravel phpunit未获得正确的url

Laravel phpunit未获得正确的url,php,laravel,laravel-5,laravel-4,phpunit,Php,Laravel,Laravel 5,Laravel 4,Phpunit,我已将app.url配置值更改为正确的url(http://testing.local)进行本地测试,但当我运行phpunit测试并尝试调用()时,它正在尝试查询http://localhost而不是app.url的值。我需要做什么才能让phpunit调用正确的路径 我知道它实际上并没有调用url,只是像处理url一样处理它,但我似乎无法让它真正工作。它是否与testing.local有关直接链接到/public而不是/?据我所知,Laravel应该在运行PHPUnit时使用“testing”环

我已将app.url配置值更改为正确的url(
http://testing.local
)进行本地测试,但当我运行phpunit测试并尝试调用()时,它正在尝试查询
http://localhost
而不是app.url的值。我需要做什么才能让phpunit调用正确的路径


我知道它实际上并没有调用url,只是像处理url一样处理它,但我似乎无法让它真正工作。它是否与testing.local有关直接链接到
/public
而不是
/

据我所知,Laravel应该在运行PHPUnit时使用“testing”环境变量。然而,我和你有同样的问题。为了让它工作,我手动设置应用程序url

$test_url = Config::get('app.url');

希望这对遇到同样问题的人有所帮助。

要更改PHPUnit的测试url:

转到Laravel项目中的
/tests/TestCase.php

将下一行更改为您需要的url:

// The base URL to use while testing the application.
protected $baseUrl = 'http://newurl.com';

完成。

如果要静态指定测试的根URL,请将其添加到phpunit.xml:

<env name="APP_URL" value="http://testing.local"/>

如上所述,您可以在laravel代码的任何地方使用
Config::get('app.url')
,包括单元测试

注意:建议在.env文件中设置此值,以便专门针对每个环境进行设置

使用config和.env变量时,请记住使用以下命令清除这些变量的缓存:

php artisan cache:clear
php artisan config:cache

我认为最好的方法是在phpunit.xml配置文件中设置测试应用程序url:

<env name="APP_URL" value="some-url.test"/>


Laravel有几个函数可以获取url:(1)
url()->current()
(2)
request()->url()

他们都使用同一个源

在phpunit的情况下,测试从配置中设置数据

config('app.url')
配置正在从
.env
记录
APP\u URL
获取数据

所以你有几个选择

1)

要在
.env
文件或
phpunit.xml
文件中设置
APP\u URL
,在这两种情况下,该值仅在单元测试中使用

但是对于所有单元测试,您只有一个URL

2)

在运行时设置
APP\u URL
但是,您需要在
Tests\TestCase

public function setUp(): void
{
         $_ENV['APP_URL'] = 'example.com';
         parent::setUp();
}
因为所有的初始化都隐藏在
设置
功能中,您无法使用
config()->set('app.url',…
parent::setUp()之前;
将太早,之后将太迟

但每个单元测试文件只有一个URL

3)

您可以在
setUp()
函数之后的任何位置设置它,它将覆盖
.env
config()


没有“但是”。

在哪个文件中设置此值?在哪里设置此值?要在哪里设置此值?在phpunit.xml中设置该值似乎不起作用。在Laravel 6中,ForceRootUrl对我来说不是一个好主意
public function setUp(): void
{
         $_ENV['APP_URL'] = 'example.com';
         parent::setUp();
}
request()->headers->set('HOST', 'example.com');