Laravel phpunit 没有得到正确的网址

Posted

技术标签:

【中文标题】Laravel phpunit 没有得到正确的网址【英文标题】:Laravel phpunit not getting right url 【发布时间】:2014-05-22 22:21:06 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

更改 PHPUnit 的测试地址:

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

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

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

完成。

【讨论】:

【参考方案2】:

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

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

相反,如果您想在测试期间动态更改 URL,从 Laravel 5.4 开始,$baseUrl 方法不再起作用。

此外,尝试使用 \Config:set('app.url', 'http://testing.local') 动态设置 url 也不起作用,因为 Laravel 似乎缓存了根 url

您可以通过以下方式动态设置自定义 URL:

\URL::forceRootUrl('http://testing.local');

【讨论】:

forceRootUrl 在 Laravel 6 中不适合我【参考方案3】:

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

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

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

php artisan cache:clear
php artisan config:cache

【讨论】:

【参考方案4】:

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

他们都使用相同的来源。

如果是 phpunit,测试是从配置那里设置数据

config('app.url')

并且配置正在从.env记录APP_URL获取数据。

所以你有几个选择

1)

.env 文件或phpunit.xml 文件中设置APP_URL - 在这两种情况下,该值仅用于单元测试。

但是你的所有单元测试只有一个 URL。

2)

在运行时设置APP_URL 但是,您需要在 Tests\TestCase 中的函数 setUp() 之前执行此操作

public function setUp(): void

         $_ENV['APP_URL'] = 'example.com';
         parent::setUp();

因为所有初始化都隐藏在 setUp 函数中,你不能使用 config()-&gt;set('app.url',...。在parent::setUp(); 之前为时过早,之后为时已晚。

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

3)

request()->headers->set('HOST', 'example.com');

你可以在setUp()函数之后的任何地方设置它,它会覆盖.envconfig()

没有“但是”。

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

据我所知,Laravel 应该在您运行 PHPUnit 时使用“测试”环境变量。但是,我遇到了和你一样的问题。为了让它工作,我手动设置了应用 url。

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

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

【讨论】:

你会在哪个文件中设置这个? 你在哪里设置的? 这个值应该在哪里设置?在 phpunit.xml 中设置值似乎不起作用

以上是关于Laravel phpunit 没有得到正确的网址的主要内容,如果未能解决你的问题,请参考以下文章

Laravel PHPunit 重定向到本地主机

无法测试事件是不是具有 Laravel 5 和 PHPUnit 的属性

如何在 Laravel PHPUnit 测试中获取响应变量?

Laravel单元测试类未找到错误

在 Laravel 中设置 PHPUnit 测试

Laravel PHPUnit 模拟请求