Chr*_*man 4 testing doctrine symfony1 functional-testing symfony-1.4
我正在为需要用户身份验证的页面编写功能测试.我正在使用sfDoctrineGuard插件.
如何在测试中验证用户身份?
我是否必须通过登录屏幕输入每个测试?
这是我的错误代码:
$b->post('/sfGuardAuth/signin',
array('signin[password]' => 'password',
'signin[username]' => 'user',
'signin[_csrf_token]' => '7bd809388ed8bf763fc5fccc255d042e'))->
with('response')->begin()->
checkElement('h2', 'Welcome Humans')->
end()
Run Code Online (Sandbox Code Playgroud)
谢谢
小智 6
关于进行登录的棘手部分是测试浏览器在每个请求之前清除上下文对象(请参阅sfBrowser :: call()).
您可以通过注入一个侦听器来对用户进行身份验证,该侦听器将在上下文初始化期间触发事件signIn()时调用用户的方法context.load_factories:
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');
Run Code Online (Sandbox Code Playgroud)
这将导致浏览器为所有后续请求登录用户.请注意,sfBrowser它不是有removeListener()方法.
改编自sfJwtPhpUnitPlugin(FD:我是这个项目的主要开发者).
| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |