最近我尝试使用PHPUnit测试我的REST API。 我面临着为我的测试用例发送http授权标题的问题。 每次我这样做,我得到403响应而不是200响应 这是我的代码:
<?php
use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;
use Zend\Http\Request;
use Zend\Http\Headers;
use Zend\Http\Response;
class TrialTest extends AbstractHttpControllerTestCase
{
protected $traceError = true;
public function setUp()
{
$this->setApplicationConfig(
include 'config/application.config.php'
);
parent::setUp();
}
public function testAction()
{
$this->request = new Request();
$this->getRequest()->setMethod('GET');
//$headers = new \Zend\Http\Headers;
//$header = $headers->addHeader($headers->fromString('Authorization:Bearer test'));
$this->getRequest()->sendHeaders('Authorization:Bearer test');
//var_dump($headers);
//$this->getRequest()->setHeaders($header);
$this->dispatch('/campaign');
$this->assertResponseStatusCode(200);
}
}
请帮助!!我哪里错了?
答案 0 :(得分:1)
尝试像这样设置标题:
$headers = new \Zend\Http\Headers;
$headers->addHeaderLine('Authorization', 'Bearer test');
$this->request->setHeaders($headers);
您必须确保test
有效的OAuth令牌,否则它永远不会有效。我不太确定4字符令牌是否能够正确验证...
我认为您的测试设计存在一般问题。您只在控制器实例中设置请求对象,但负责身份验证的服务无权访问此请求对象,因此它不会正确授权请求。
如果编写一个控制器测试,在其中测试路由'/campaign'
,则应仅测试控制器功能并为所有依赖项设置模拟。我认为主要问题始于您的setUp
方法。要测试此控制器,您不应加载整个application.config.php
。您应该设置MvcEvent
实例并附加此事件所需的所有内容(正确的Router
实例等),然后调度控制器。
检查 such a ZF2 controller test here 的正确示例。
测试OAuth
模块应该在独立测试中进行。