gpt4 book ai didi

testing - 如何编写带有用户身份验证的功能测试?

转载 作者:行者123 更新时间:2023-11-28 19:51:17 25 4
gpt4 key购买 nike

我正在为需要用户身份验证的页面编写功能测试。我正在使用 sfDoctrineGuard 插件。

如何在我的测试中对用户进行身份验证?

我是否必须通过登录屏幕进入每项测试?

这是我的错误代码:

$b->post('/sfGuardAuth/signin',
array('signin[password]' => 'password',
'signin[username]' => 'user',
'signin[_csrf_token]' => '7bd809388ed8bf763fc5fccc255d042e'))->
with('response')->begin()->
checkElement('h2', 'Welcome Humans')->
end()

谢谢

最佳答案

登录的棘手部分是测试浏览器会在每次请求之前清除上下文对象(请参阅 sfBrowser::call())。

您可以通过注入(inject)一个监听器来验证用户身份,该监听器将在上下文初始化期间触发 context.load_factories 事件时调用用户的 signIn() 方法:

function signin( sfEvent $event )
{
/* @var $user sfGuardSecurityUser */
if( ! $user = $event->getSubject()->getUser() )
{
throw new RuntimeException('User object not created.');
}

if( ! $user instanceof sfGuardSecurityUser )
{
throw new LogicException(sprintf(
'Cannot log in %s; sfGuardSecurityUser expected.',
get_class($user)
));
}

if( $user->isAuthenticated() )
{
$user->signOut();
}

/* Magic happens here: */
$user->signIn($desired_user_to_log_in_as);

$event->getSubject()->getEventDispatcher()->notify(new sfEvent(
$this,
'application.log',
array(sprintf('User is logged in as "%s".', $user->getUsername()))
));
}

/* Set signin() to fire when the browser inits the context for subsequent
* requests.
*/
$b->addListener('context.load_factories', 'signin');

这将导致浏览器为所有 后续请求登录用户。请注意,sfBrowser 没有 removeListener() 方法。

改编自sfJwtPhpUnitPlugin (FD:我是这个项目的首席开发人员)。

关于testing - 如何编写带有用户身份验证的功能测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com