PHPUnit - 未定义的索引:REQUEST_METHOD

时间:2018-01-29 20:54:51

标签: php phpunit

我正在尝试测试以if语句开头的过程PHP文件:

if ($_SERVER["REQUEST_METHOD"] == "POST") {

然后继续使用超全局$_POST来获取变量,然后在SQL查询中使用该变量。

下面是我试图用来测试上面的程序文件的PHPUnit代码:

<?php

use PHPUnit\Framework\TestCase;

require '../public_html/PHP/dbconfig.php';
//require '../public_html/PHP/getters/getBranchHeaderPhoto';

class getBranchHeaderPhotoTest extends TestCase {

    protected function setUp()
    {
        parent::setUp();
        $_POST = array();
    }

    /**
     * @test
     */
    public function checkThatGetBranchHeaderPhotoReturnsTheDirectoryAndImage() {
        $_SERVER["REQUEST_METHOD"] == "POST";
        $_POST = array("all");
        ob_start();
        include('../public_html/PHP/getters/getBranchHeaderPhoto.php');
        $contents = ob_get_contents();

        $this->assertNotNull($contents);
    }
}

?>

但是,当我尝试在命令行中运行测试时,运行以下cmd phpunit getBranchHeaderPhotoTest.php,会发生以下错误;

There was 1 error:

1) getBranchHeaderPhotoTest::checkThatGetBranchHeaderPhotoReturnsTheDirectoryAndImage
Undefined index: REQUEST_METHOD

C:\Users\User\Documents\project\project\test\getBranchHeaderPhotoTest.php:21

ERRORS!
Tests: 1, Assertions: 0, Errors: 1.

我尝试过关于此主题的先前SO回答,但无法将请求方法传递到过程文件中。这可能吗?

1 个答案:

答案 0 :(得分:2)

当您需要==(作业)时,您正在使用=(比较)。变化:

$_SERVER["REQUEST_METHOD"] == "POST";

为:

$_SERVER["REQUEST_METHOD"] = "POST";

如果可能,请修复有问题的代码以检查密钥是否存在,例如:

if (($_SERVER["REQUEST_METHOD"] ?? 'GET') == 'POST')