【发布时间】:2015-07-31 12:45:40
【问题描述】:
我正在对 Symfony2 控制器进行功能测试,从这里继承我的测试类:
class InsecureWebTestCase extends WebTestCase {
protected $client = null;
public function setUp() {
$this->client = static::createClient();
$session = $this->client->getContainer()->get('session');
$firewall = 'default';
$token = new UsernamePasswordToken('norbert.scrunge@gmail.com', null, $firewall, array('ROLE_USER', 'ROLE_ADMIN'));
// $this->client->getContainer()->get('security.context')->setToken($token);
$session->set("_security_$firewall", serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
}
如果我将控制器用作应用程序的一部分:
$this->container->get('security.token_storage')->getToken()->getUser() 和 $this->getUser() 是我的 Doctrine “用户”实体的实例。
但是在运行功能测试时:
$this->container->get('security.token_storage')->getToken()->getUser() 是包含用户名的字符串,$this->getUser() 是 NULL。
我需要做些什么来使我的应用和功能测试中的行为保持一致?
【问题讨论】:
-
在执行请求时尝试这种方式:
$client->request('GET', '/post/12', array(), array(), array( 'PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word', ));
标签: php symfony functional-testing security-context