Vit*_*lyP 9 phpunit unit-testing symfony fosuserbundle
如何登录内部测试以便能够执行特定于用户的操作?
实际上,身份验证必须像真实用户那样进行.在这种情况下,您必须知道普通密码并填写登录表单
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class XXX extends WebTestCase {
public function testUserLogin() {
$client = static::createClient();
$crawler = $client->request('GET', '/login');
$form = $crawler->selectButton('_submit')->form(array(
'_username' => 'user',
'_password' => 'pa$$word',
));
$client->submit($form);
$crawler = $client->followRedirect(); // "/" page
// if credentials were correct, you should be logged in and ready to test your app
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我为一个项目实现它的方式(不是使用 FOSUserBundle,但可能你会发现它很有帮助)
private function createAuthorizedClient($role)
{
$userProvider = new YourUserProvider(...);
$user = $userProvider->createUserMethod(...);
$client = $this->createClient(); //Normal WebTestCase client
$client->getCookieJar()->set(new Cookie(session_name(), true));
$session = self::$kernel->getContainer()->get('session');
$token = new UsernamePasswordToken($user, 'password', 'main', array($role));
$client->getContainer()->get('security.context')->setToken($token);
$session->set('_security_main', serialize($token));
return $client;
}
Run Code Online (Sandbox Code Playgroud)
不要忘记模拟用户对象的预期结果。