使用 PHPUnit 测试用例断言 403 Access Denied http 状态
Assert 403 Access Denied http status with PHPUnit test case
我的项目中有一个针对 404、403 和其他异常的自定义错误模板。我想创建单元测试用例来断言 http 错误。当我使用用户登录并访问供应商的授权页面时,我在浏览器中收到 403 访问被拒绝,但在单元测试用例中,我总是收到 404 页面未找到错误。
这是我的测试场景:
class ErrorExceptionTest extends WebTestCase
{
public function testAccessDeniedException()
{
$server['HTTP_HOST'] = 'http://www.test.com/';
$client = static::createClient(array('debug' => false), $server);
$client->disableReboot();
$session = $client->getContainer()->get('session');
$firewall = 'main';
$token = new UsernamePasswordToken('user', null, $firewall, array('ROLE_USER'));
$session->set("_security_$firewall", serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
$client->request('GET', '/vendor/profile/edit');
$this->assertEquals(403, $client->getResponse()->getStatusCode());
$this->assertContains('Sorry! Access Denied', $client->getResponse()->getContent());
}
}
我的测试用例失败了,当我打印响应内容时它会显示 404 错误模板。
解决它并找到问题。所以,我的解决方案是不需要使用 http 主机。
public function testAccessDeniedException()
{
$client = static::createClient(array('debug' => false));
$session = $client->getContainer()->get('session');
$firewall = 'main';
$token = new UsernamePasswordToken('user', null, $firewall, array('ROLE_USER'));
$session->set("_security_$firewall", serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
$client->request('GET', 'fr/vendor/profile/edit');
$this->assertEquals(403, $client->getResponse()->getStatusCode());
$this->assertContains('Sorry! Access Denied', $client->getResponse()->getContent());
}
我的项目中有一个针对 404、403 和其他异常的自定义错误模板。我想创建单元测试用例来断言 http 错误。当我使用用户登录并访问供应商的授权页面时,我在浏览器中收到 403 访问被拒绝,但在单元测试用例中,我总是收到 404 页面未找到错误。
这是我的测试场景:
class ErrorExceptionTest extends WebTestCase
{
public function testAccessDeniedException()
{
$server['HTTP_HOST'] = 'http://www.test.com/';
$client = static::createClient(array('debug' => false), $server);
$client->disableReboot();
$session = $client->getContainer()->get('session');
$firewall = 'main';
$token = new UsernamePasswordToken('user', null, $firewall, array('ROLE_USER'));
$session->set("_security_$firewall", serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
$client->request('GET', '/vendor/profile/edit');
$this->assertEquals(403, $client->getResponse()->getStatusCode());
$this->assertContains('Sorry! Access Denied', $client->getResponse()->getContent());
}
}
我的测试用例失败了,当我打印响应内容时它会显示 404 错误模板。
解决它并找到问题。所以,我的解决方案是不需要使用 http 主机。
public function testAccessDeniedException()
{
$client = static::createClient(array('debug' => false));
$session = $client->getContainer()->get('session');
$firewall = 'main';
$token = new UsernamePasswordToken('user', null, $firewall, array('ROLE_USER'));
$session->set("_security_$firewall", serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
$client->request('GET', 'fr/vendor/profile/edit');
$this->assertEquals(403, $client->getResponse()->getStatusCode());
$this->assertContains('Sorry! Access Denied', $client->getResponse()->getContent());
}