使用 Session 和 Post 的 Symfony2 功能测试
Symfony2 functional test with Session and Post
我正在尝试使用 PHPUnit 编写一些 Symfony2 功能测试,模拟登录用户通过 AJAX 调用请求某些资源。
测试首先使用标准 FOSUserBundle 登录表单模拟用户登录;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class MyWebTestCase extends WebTestCase {
public function login($username, $password = 'password')
{
$client = static::createClient();
$client->followRedirects(true);
$crawler = $client->request('GET', '/login');
$form = $crawler->selectButton('Login')->form(array(
'_username' => $username,
'_password' => $password,
));
$crawler = $client->submit($form);
return $client;
}
}
然后,测试从数据库中获取一个实体并将其设置在一个会话变量中,然后发送一个 POST 请求来检索所请求的资源,使用一些 JSON 其中包括有关的额外信息正在请求什么(在实际应用中,一些 JavaScript 组成 JSON 以响应用户的操作,然后通过 AJAX 提交);
$this->client = $this->login('user@domain.com', 'password');
// we want element number 6 from the fixtures
$chart = $this->em->getRepository('MyBundle:Element')->find(6);
$guid = $chart->getGuid();
$this->client->getContainer()->get('session')->set($guid, $chart);
$link = sprintf('/viewer/data/%d/%s', 1, $guid);
$crawler = $this->client->request('POST', $link, array(), array(),
array('CONTENT_TYPE' => 'application/json'),
'{"filters":[]}');
当测试达到这一点时,会产生一个错误;
ini_set(): A session is active. You cannot change the session module's ini settings at this time
我正在使用 Symfony 2.6.5 和 PHPUnit 4.5.0
您是否使用模拟课程进行测试?如果没有试试这个。
Config_test.yml
framework:
test: ~
session:
storage_id: session.storage.mock_file
本机会话存储旨在处理每个进程的单个请求,这可能会导致您的错误。如果是你的话。
我正在尝试使用 PHPUnit 编写一些 Symfony2 功能测试,模拟登录用户通过 AJAX 调用请求某些资源。
测试首先使用标准 FOSUserBundle 登录表单模拟用户登录;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class MyWebTestCase extends WebTestCase {
public function login($username, $password = 'password')
{
$client = static::createClient();
$client->followRedirects(true);
$crawler = $client->request('GET', '/login');
$form = $crawler->selectButton('Login')->form(array(
'_username' => $username,
'_password' => $password,
));
$crawler = $client->submit($form);
return $client;
}
}
然后,测试从数据库中获取一个实体并将其设置在一个会话变量中,然后发送一个 POST 请求来检索所请求的资源,使用一些 JSON 其中包括有关的额外信息正在请求什么(在实际应用中,一些 JavaScript 组成 JSON 以响应用户的操作,然后通过 AJAX 提交);
$this->client = $this->login('user@domain.com', 'password');
// we want element number 6 from the fixtures
$chart = $this->em->getRepository('MyBundle:Element')->find(6);
$guid = $chart->getGuid();
$this->client->getContainer()->get('session')->set($guid, $chart);
$link = sprintf('/viewer/data/%d/%s', 1, $guid);
$crawler = $this->client->request('POST', $link, array(), array(),
array('CONTENT_TYPE' => 'application/json'),
'{"filters":[]}');
当测试达到这一点时,会产生一个错误;
ini_set(): A session is active. You cannot change the session module's ini settings at this time
我正在使用 Symfony 2.6.5 和 PHPUnit 4.5.0
您是否使用模拟课程进行测试?如果没有试试这个。
Config_test.yml
framework:
test: ~
session:
storage_id: session.storage.mock_file
本机会话存储旨在处理每个进程的单个请求,这可能会导致您的错误。如果是你的话。