PHPUnit CakePHP 4.X - 模拟身份 object,但怎么做?
PHPUnit CakePHP 4.X - mock up the identity object, but how?
我用 cakephp 编写了一个网络应用程序 4.x。在我的控制器(AppController.php)中,我实现了以下内容:
...
public function beforeRender(\Cake\Event\EventInterface $event)
{
#Load User_ID
if($this->Authentication->getIdentity()){
$identity = $this->Authentication->getIdentity();
$user_id = $this->Authentication->getIdentity()->getIdentifier();
}
}
...
现在我编写了以下 phpunit 测试:
...
private function loginAsAdmin() {
$this->Users = TableRegistry::getTableLocator()->get('Users');
$user = $this->Users->get(1);
$this->session(['Auth.User'=> $user->toArray()]);
}
/**
* Test loginAsUser method
*
* @return void
*/
public function testLoginAsAdmin(): void
{
$this->loginAsAdmin();
$this->get('/admin/dashboard');
$this->assertSession(1, 'Auth.User.id'); //check if the user is logged in
}
...
但是我的身份object一直是空的。
object 实际上应该是这样的:
我不知道如何实施它。有人能帮我吗? :)
使用身份验证插件,用户默认存储为对象,如果您传递的不是实现 \ArrayAccess
的对象,那么身份验证服务会将给定数据包装在 [=12] 的实例中=].
此外,数据默认存储在 Auth
键,而不是 Auth.User
。
理论上传递数组数据也应该有效(如“被视为经过身份验证且数据被设置在身份对象中”),即使嵌套在附加键中(除非您启用了 identify
会话身份验证器的选项),因此您的代码中可能存在其他问题,数组对象中存在 storage
和 _config
之类的键这一事实真的很奇怪,这不应该发生在输出中盒子设置。
无论如何,通常您会像这样使用身份验证进行测试:
$user = $this->Users->get(1);
$this->session(['Auth' => $user]);
另见
我用 cakephp 编写了一个网络应用程序 4.x。在我的控制器(AppController.php)中,我实现了以下内容:
...
public function beforeRender(\Cake\Event\EventInterface $event)
{
#Load User_ID
if($this->Authentication->getIdentity()){
$identity = $this->Authentication->getIdentity();
$user_id = $this->Authentication->getIdentity()->getIdentifier();
}
}
...
现在我编写了以下 phpunit 测试:
...
private function loginAsAdmin() {
$this->Users = TableRegistry::getTableLocator()->get('Users');
$user = $this->Users->get(1);
$this->session(['Auth.User'=> $user->toArray()]);
}
/**
* Test loginAsUser method
*
* @return void
*/
public function testLoginAsAdmin(): void
{
$this->loginAsAdmin();
$this->get('/admin/dashboard');
$this->assertSession(1, 'Auth.User.id'); //check if the user is logged in
}
...
但是我的身份object一直是空的。
object 实际上应该是这样的:
我不知道如何实施它。有人能帮我吗? :)
使用身份验证插件,用户默认存储为对象,如果您传递的不是实现 \ArrayAccess
的对象,那么身份验证服务会将给定数据包装在 [=12] 的实例中=].
此外,数据默认存储在 Auth
键,而不是 Auth.User
。
理论上传递数组数据也应该有效(如“被视为经过身份验证且数据被设置在身份对象中”),即使嵌套在附加键中(除非您启用了 identify
会话身份验证器的选项),因此您的代码中可能存在其他问题,数组对象中存在 storage
和 _config
之类的键这一事实真的很奇怪,这不应该发生在输出中盒子设置。
无论如何,通常您会像这样使用身份验证进行测试:
$user = $this->Users->get(1);
$this->session(['Auth' => $user]);
另见