PHPUnit 错误“未定义的索引:HTTP_HOST”

Posted

技术标签:

【中文标题】PHPUnit 错误“未定义的索引:HTTP_HOST”【英文标题】:PHPUnit error "undefined index : HTTP_HOST" 【发布时间】:2013-07-19 14:15:05 【问题描述】:

我已经声明了一个如下所示的 HTTP_HOST。

public function testReadUser() 

    $_SERVER['HTTP_HOST'] = "x.y";
    .
    .
    .

尽管如此,phpunit 给出了未定义的索引错误。为什么会这样?

【问题讨论】:

你能把你遇到的每一个错误都贴出来吗? "undefined index : HTTP_HOST" 这是唯一的错误语句。我使用了 bootstrap.php 文件并添加了 $_SERVER['HTTP_HOST'] = 'myHost'; 行。这解决了问题。我不太了解 bootstrap.php 文件。能否简单介绍一下这个文件有什么用,我可以通过这个文件传递get和post参数来测试文件吗? 我可以告诉你,但谷歌搜索“phpunit bootstrap”会给你大量相关结果.. @N.B.我当然会。谢谢顺便说一句。 【参考方案1】:

在您的phpunit.xml 文件中,您可以设置服务器变量。在phpunit 根下添加php 元素:

<phpunit>
    <php>
        <server name='HTTP_HOST' value='http://localhost' />
    </php>
</phpunit>

更多信息请参见the docs。

【讨论】:

【参考方案2】:

它给你这个错误是因为你正在通过命令行界面 (CLI) 运行测试。 CLI 无法获取该信息,因为没有通过 HTTP 传入的请求。

【讨论】:

但是,它是$_SERVER 变量。 我在同一个项目的另一个测试文件中以同样的方式使用同一个变量。我使用 netbeans 而不是命令行。 来自手册:HTTP_HOST - Contents of the Host: header from the current request, if there is one.。这意味着没有这样的标题。发送该标头的是浏览器。配置您的 netbeans 以在您运行测试时发送它。这是从实际 HTTP 请求中读取的一条信息,如果您的客户端不提供该信息,PHP 将不会在 $_SERVER 数组中创建提到的索引。 我知道我需要以某种方式告诉 netbeans 这个变量。但不幸的是,我不知道怎么做。有人告诉我通过在 .ini 文件中添加参数来做到这一点。你能看看我之前关于在测试期间添加参数的问题吗? ***.com/questions/17759916/… INI 文件在这里帮不了你。手册说这些变量是由 Web 服务器创建的。这意味着您必须提供服务器可以用来创建这些请求的正确 HTTP 请求。如果您在 $_SERVER 数组中没有该索引,只需将其手动添加到您的测试文件中?我不使用 netbeans,所以我无法真正告诉您如何正确配置它。它显然没有执行任何类型的 HTTP 请求,它似乎只是使用 CLI 来运行您的测试文件。【参考方案3】:

您可以在测试方法中声明值(测试方法需要)。

例如:

function testMethod()
$_SERVER['yourvar']='yourvalue';
...your code making the request via phpunit to the method you are testing

通过在您的测试方法中声明 $_SERVER,它将可用于您正在测试的方法。如果您需要这些值,它也适用于 $_POST 和 $_GET。

【讨论】:

以上是关于PHPUnit 错误“未定义的索引:HTTP_HOST”的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit 类“错误”不扩展 PHPUnit_Framework_TestCase

PHPUnit - 啥都不做,没有错误,没有输出

phpunit 找不到类,PHP 致命错误

当我尝试输入 phpunit 时,我不断收到此错误

PHPUnit CodeIgniter 生成夹具 PHP 致命错误:找不到类“PHPUnit_Framework_TestCase”

使用 wordpress 的 phpunit 上的 RecursiveDirectoryIterator 错误