gpt4 book ai didi

unit-testing - Symfony2 - 使用 FOSUserBundle 进行测试

转载 作者:行者123 更新时间:2023-12-04 00:06:46 25 4
gpt4 key购买 nike

我会用 FOSUserBundle 为 Symfony2 编写一个测试。

目前我尝试了一些方法,但没有一个有效。

我需要一个像“createAuthClient”这样的函数。

这是我的基础课。
我发布它是因为你可以更好地理解我的问题。

<?php
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\BrowserKit\Cookie;

class WebTestMain extends WebTestCase
{
protected static $container;

static protected function createClient(array $options = array(), array $server = array())
{
$client = parent::createClient($options, $server);

self::$container = self::$kernel->getContainer();

return $client;
}

static function createAuthClient(array $options = array(), array $server = array())
{
// see lines below with my tries
}
}

第一次尝试:
if(static::$kernel === null)
{
static::$kernel = static::createKernel($options);
static::$kernel->boot();
}
if(static::$container === null)
{
self::$container = self::$kernel->getContainer();
}

$parameters = self::$container->getParameter('test');
$server = array_merge(array('HTTP_HOST' => $parameters['host'], 'HTTP_USER_AGENT' => $parameters['useragent']), $server);

$client = self::createClient($options, $server);

$userProvider = self::$container->get('fos_user.user_manager');
$user = $userProvider->findUserBy(array('id' => 1));
$client->getCookieJar()->set(new Cookie('MOCKSESSID', true));
$session = self::$kernel->getContainer()->get('session');
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$client->getContainer()->get('security.context')->setToken($token);
$session->set('_security_main', serialize($token));

return $client;

然后我搜索和搜索...
我的第二次尝试。

if(static::$kernel === null)
{
static::$kernel = static::createKernel($options);
static::$kernel->boot();
}
if(static::$container === null)
{
self::$container = self::$kernel->getContainer();
}

$parameters = self::$container->getParameter('test');
$server = array_merge(
array(
'HTTP_HOST' => $parameters['host'],
'HTTP_USER_AGENT' => $parameters['useragent'],
'PHP_AUTH_USER' => 'admin',
'PHP_AUTH_PW' => 'admin'
),
$server
);
$client = static::createClient(array(), array());
$client->followRedirects();
return $client;

这是我在发布这个问题之前的最后一次尝试...
$client = self::createClient($options, $server);

$parameters = self::$container->getParameter('test');
$server = array_merge(
array(
'HTTP_HOST' => $parameters['host'],
'HTTP_USER_AGENT' => $parameters['useragent']
),
$server
);

$client->setServerParameters($server);

$usermanager = self::$container->get('fos_user.user_manager');
$testuser = $usermanager->createUser();
$testuser->setUsername('test');
$testuser->setEmail('test@mail.org');
$testuser->setPlainPassword('test');
$usermanager->updateUser($testuser);

return $client;

提前谢谢你。

最佳答案

我发现使用经过身份验证的用户进行测试的最佳方法是访问您的登录页面并提交包含您从夹具加载的用户名和密码的表单。这可能看起来又慢又麻烦,但会测试用户实际会做什么。您甚至可以创建自己的方法来快速轻松地使用它。

public function doLogin($username, $password) {
$crawler = $this->client->request('GET', '/login');
$form = $crawler->selectButton('_submit')->form(array(
'_username' => $username,
'_password' => $password,
));
$this->client->submit($form);

$this->assertTrue($this->client->getResponse()->isRedirect());

$crawler = $this->client->followRedirect();
}

关于unit-testing - Symfony2 - 使用 FOSUserBundle 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14957807/

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