Zend使用PHPUnit为

时间:2015-10-20 14:05:16

标签: php zend-framework2

最近我尝试使用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);
    }
}

请帮助!!我哪里错了?

1 个答案:

答案 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模块应该在独立测试中进行。