【问题标题】:Allow all actions for authentication in integration test cakephp允许集成测试 cakephp 中的所有身份验证操作
【发布时间】:2016-03-12 13:18:46
【问题描述】:

我目前正在尝试为某些控制器编写集成测试,因此需要发送身份验证标头。在我的控制器中,我通过以下代码公开了一些操作:

namespace App\Controller\Api;

use Cake\Event\Event;
use Cake\Network\Exception\UnauthorizedException;
use Cake\Utility\Security;
use Firebase\JWT\JWT;

class UsersController extends AppController
{
   public function initialize()
   {
       parent::initialize();
       $this->Auth->allow(['add', 'token']); // public methods
   }
  .....
}

现在我有一个集成测试用例,我希望在其中允许所有操作无需身份验证即可访问。有没有什么简单的方法可以做到这一点?

集成案例代码:

namespace App\Test\TestCase\Controller;

use App\Controller\Api\UsersController;
use Cake\TestSuite\IntegrationTestCase;

class ApiPicturesControllerTest extends IntegrationTestCase{
   public $fixtures = [
      'app.albums',
      'app.pictures',
      'app.users',
      'app.comments',
      'app.users_albums'
   ];
   public function setUp(){
       parent::setUp();
       // Allow all actions
       // $this->Auth->allow();
   }
   public function testViewShouldPass(){
        $this->configRequest([
           'headers' => [
               'Accept' => 'application/json'
           ]
        ]);
        $data = $this->get('/api/pictures/1.json');
        $this->assertResponseOk();
    }
}

【问题讨论】:

  • 这有点违背集成测试的目的,不是吗?也许您真正要寻找的是在经过身份验证的状态下访问操作?
  • 是的,因为我是集成测试的新手,所以我不确定如何模拟无状态身份验证的身份验证。由于我已经被困了一天试图让它工作,我现在只想绕过身份验证过程并稍后解决这个问题。

标签: unit-testing cakephp integration-testing cakephp-3.0


【解决方案1】:

通常可以在覆盖的\Cake\TestSuite\IntegrationTestCase::controllerSpy() 方法中操作控制器,例如

public function controllerSpy($event)
{
    parent::controllerSpy($event);

    if (isset($this->_controller)) {
        $this->_controller->Auth->allow();
    }
}

但正如 cmets 中已经提到的,最好正确验证您的请求!

虽然集成测试不一定是黑盒测试,但深入了解测试对象的内部并不是一个好主意。当您在“测试所有内容”和“测试单元”之间寻找一些东西时,模拟集成测试中的某些部分可能是合理的,即更大的模块组,但这通常只有在请求中涉及高度复杂性时才需要。

另见

【讨论】:

  • 谢谢,这工作:)。我知道这不是最终让集成测试用例通过的方法,因此我将尝试使身份验证部分工作。
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
相关资源
最近更新 更多