Laravel phpunit没有得到正确的网址

时间:2014-04-09 15:28:24

标签: php laravel laravel-5 laravel-4 phpunit

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

我知道它实际上并没有调用url,只是像处理它一样处理它,但我似乎无法让它实际工作。它可以与testing.local直接链接到http://localhost而不是/public有关吗?​​

6 个答案:

答案 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()函数之后的任何位置进行设置,它将覆盖.envconfig()

没有“按钮”。