我已将app.url配置值更改为正确的url(http://testing.local
)以便在本地进行测试,但是当我运行phpunit测试并尝试调用()时,它正在尝试查询{{1而不是app.url的值。我需要做些什么才能让phpunit调用正确的路径?
我知道它实际上并没有调用url,只是像处理它一样处理它,但我似乎无法让它实际工作。它可以与testing.local直接链接到http://localhost
而不是/public
有关吗?
答案 0 :(得分:8)
更改PHPUnit的测试网址:
转到Laravel项目中的/tests/TestCase.php
。
将下一行更改为您需要的网址:
// The base URL to use while testing the application.
protected $baseUrl = 'http://newurl.com';
完成。
答案 1 :(得分:2)
如果要静态指定测试的根URL,请将其添加到phpunit.xml:
<env name="APP_URL" value="http://testing.local"/>
相反,如果您想在测试期间以语言方式更改URL,则从Laravel 5.4开始$baseUrl
方法不再起作用
此外,尝试使用\Config:set('app.url', 'http://testing.local')
设置网址也不起作用,因为似乎Laravel缓存了根网址
您可以使用以下命令动态设置自定义网址:
\URL::forceRootUrl('http://testing.local');
答案 2 :(得分:1)
如上所述,您可以在laravel代码中的任何位置使用Config::get('app.url')
,包括单元测试。
注意:建议在.env文件中设置此值,以便可以针对每个环境专门设置。
使用config和.env变量时,请记住使用以下命令清除缓存:
php artisan cache:clear
php artisan config:cache
答案 3 :(得分:0)
据我所知,Laravel应该使用&#39;测试&#39;运行PHPUnit时的环境变量。但是,我遇到了同样的问题。为了让它工作,我手动设置应用程序URL。
$test_url = Config::get('app.url');
希望这有助于遇到同一问题的任何人。
答案 4 :(得分:0)
我认为最好的方法是在phpunit.xml配置文件中设置测试应用程序URL:
<env name="APP_URL" value="some-url.test"/>
答案 5 :(得分:0)
Laravel具有一些获取网址的功能:(1)url()->current()
(2)request()->url()
他们两个都使用相同的来源。
对于phpunit,测试是在配置中设置数据
config('app.url')
并且配置正在从.env
记录APP_URL
中获取数据。
所以您有一些选择
1)
在APP_URL
文件或.env
文件中设置phpunit.xml
-在两种情况下,该值仅在单元测试中使用。
但是所有单元测试只有一个URL。
2)
在运行时设置APP_URL
但是,您需要在setUp()
Tests\TestCase
之前执行此操作
public function setUp(): void
{
$_ENV['APP_URL'] = 'example.com';
parent::setUp();
}
由于所有初始化都隐藏在setUp
函数中,因此您无法使用
config()->set('app.url',...
。在parent::setUp();
之前为时过早,在此之后–为时已晚。
但是每个单元测试文件只有一个URL。
3)
request()->headers->set('HOST', 'example.com');
您可以在setUp()
函数之后的任何位置进行设置,它将覆盖.env
和config()
没有“按钮”。