当它应该是200时,PHPUnit返回404

时间:2016-04-13 07:07:34

标签: php laravel phpunit laravel-5.2

我之前从未编写过测试用例,并且正在尝试为我编写的API执行此操作。

我尝试使用帖子请求调用路线,因此使用以下内容:

public function testRequestCorrectApiKey()
    {
        //Request with X-Authorization sending correct API Key
        $response = $this->call('POST', '/authenticate', ['email' => 'testingphpunit@phpunittest.com', 'password' => 'phpunittest', [], [], ['X-Authorization' => '123workingapikey123']]);

        $this->assertEquals(200, $response->status());
    }

这总是失败并出现错误:

  

断言404匹配200

失败

这自然表明它正在将请求发送到错误的路径。如何确保将其发布到正确的URL,以及如何查看其尝试访问的内容?

我已尝试将.env文件中的APP网址更新为http://localhost/gm-api/public和我的config/app.php文件。

我还将股票TestCase.php更新为:

protected $baseUrl = 'http://localhost/gm-api/public';

我哪里错了?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,并且个人认为这是一种更好的方法,只需使用Guzzle来运行测试。

/**
 * Send a request with the correct API Key
*/
public function testRequestCorrectApiKey()
{
    $key = ApiKey::find(1);

    //Request with X-Authorization sending correct API Key
    $path = 'authenticate';
    $client = new Client(['base_uri' => env('APP_URL', 'http://localhost/gm-api/public/')]);
    $response = $client->request("POST", $path, ["email" => "testingphpunit@phpunittest.com", "password" => "phpunittest", "headers" => ["X-Authorization" => $key->key ]]);
    $status_code = $response->getStatusCode();

    $this->assertEquals(200, $status_code);
}

这样做的好处是,您只需使用.envAPP_URL文件中设置基本网址即可。

我不确定为什么在更改默认测试用例中的$this->call()后我无法让$baseUrl工作 - 我只能假设它仍然在找到错误的网址。但是,使用Guzzle已经为我解决了这个问题,并且实际上也测试了服务器的配置 - 假设PHPUnit旋转了它自己的版本,但这是在测试当前的服务器环境。