Unit testing 允许集成测试cakephp中的所有身份验证操作
我目前正试图为某个控制器编写一个集成测试,因此有必要发送一个身份验证头。在我的控制器中,我通过以下代码公开了一些操作:Unit testing 允许集成测试cakephp中的所有身份验证操作,unit-testing,cakephp,integration-testing,cakephp-3.0,Unit Testing,Cakephp,Integration Testing,Cakephp 3.0,我目前正试图为某个控制器编写一个集成测试,因此有必要发送一个身份验证头。在我的控制器中,我通过以下代码公开了一些操作: namespace App\Controller\Api; use Cake\Event\Event; use Cake\Network\Exception\UnauthorizedException; use Cake\Utility\Security; use Firebase\JWT\JWT; class UsersController extends AppCont
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();
}
}
通常,可以在重写的
\Cake\TestSuite\IntegrationTestCase::controllerSpy()
方法中操作控制器,如
public function controllerSpy($event)
{
parent::controllerSpy($event);
if (isset($this->_controller)) {
$this->_controller->Auth->allow();
}
}
但是正如评论中已经提到的,最好是正确地验证您的请求
虽然集成测试不一定必须是黑盒测试,但窥视测试主题的内部并不是一个好主意。当您正在寻找介于“测试一切”和“测试单元”之间的东西时,模拟集成测试中的某些部分可能是合理的,即更大的模块组,但这应该仅在请求涉及高度复杂性时才有必要
另见