【发布时间】: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