symfony - get ('security.context' )->在功能测试中被授予

标签 symfony phpunit functional-testing

我想对 Symfony2 服务进行一项功能测试。这个想法是在 Controller 之前调用,然后使用该函数加载服务。函数是这样的:

function save($title,$description,$setId,$html,$validate,$articles){
    $articles = explode(',', $articles);

    if (false === $this->container->get('security.context')->isGranted('ROLE_USER')) {
        throw new \Exception("Not allowed");
    }else{
        $profileId  = $this->container->get('security.context')->getToken()->getUser()->getId();
        $userName   = $this->container->get('security.context')->getToken()->getUser()->getUserName();
    }
}

现在我的测试代码是:

    $client = static::createClient();

    $crawler = $client->request('GET','/sets/save',
            array(
                    "title"=>"rtyui",
                    "description"=>"aksdjhashdkjahskjdh",
                    "set_id"=>"",
                    "html"=>"",
                    "validate"=>1,
                    "articels"=>"3,4"
                )
        ); 

但我有以下几行已经不起作用:

if (false === $this->container->get('security.context')->isGranted('ROLE_USER')) {
        throw new \Exception("Not allowed");

现在的问题是,我如何进行验证过程?我尝试执行此验证过程,如文档所示:

$client = static::createClient(array(), array(
    'PHP_AUTH_USER' => 'username',
    'PHP_AUTH_PW'   => 'pa$$word',
));

但我遇到了同样的错误。

最佳答案

您还可以通过安全 token 登录用户:

$client = static::createClient();
$container = $client->getContainer();
$container->get('security.context')->setToken(
    new UsernamePasswordToken(
        $user, null, 'main', $user->getRoles()
    )
);

地点:

  1. $user - 具有角色 ROLE_USER 的用户实体实例,
  2. main - 您的安全提供商名称

关于symfony - get ('security.context' )->在功能测试中被授予,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10898419/

相关文章:

automated-tests - 机器人框架中的多行文档

symfony - 如何在symfony2的表单类型类中获取学说存储库?

php - 在 PHP 单元中创建模拟对象

PHPUnit - 数据库测试,如何管理它

symfony 功能测试 : change base url

ajax - Yii、Selenium 和多个提交按钮

php - "string"类型的预期参数, "Vendor\NameBundle\Form\EntitynameType"给定 Symfony 3.0

php - Symfony2 在自定义文件夹中生成 Controller

symfony - 根据用户角色将一个路由绑定(bind)到不同的 Controller

groovy - 在 Geb 测试中关闭和打开浏览器的正确方法是什么?