【发布时间】:2019-05-09 08:05:22
【问题描述】:
我正在用 PHPUnit 做一些测试,但我遇到了一些问题,尤其是在测试控制器时。
我想通过调用路由来测试控制器的路由并检查响应是否为 HTTP-Status 200。但控制台总是出现 smae 错误。
这也是他得到的 401 错误。
我的 PHPUnit-Test 看起来像这样:
命名空间 App\Tests\Controller;
使用 Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
类 PersonControllerTest 扩展了 WebTestCase { 私人 $client;
protected function setUp()
{
$this->client = static::createClient([], [
'PHP_AUTH_USER' => 'user',
'PHP_AUTH_PW' => 'pass',
]);
}
public function testCreate()
{
$this->client->request('GET','/create');
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
}
public function testIndex()
{
$this->client->request('GET','/');
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
}
}
我用setUp方法中的认证试过了->没用。
你有什么线索吗?
感谢所有答案或/和评论
【问题讨论】:
-
很难在没有看到很多代码的情况下提出解决方案,但请尝试在
request方法中添加令牌作为第四个参数,例如$this->client->request ........, ['HTTP_AUTHORIZATION' => 'Bearer Token'])。此外,如果客户端需要 HTTPS,那么您应该添加'HTTPS' => true。您使用的是基本身份验证吗?如果是这样,只需删除PHP_AUTH_USER和另一个然后使用Basic your_base_64_token_goes_here而不是上面的 Bearer。 -
通常你根本不会测试控制器,至少不会作为单元测试的一部分。控制器应该不包含任何业务逻辑,而只是作为应用程序的入口点,因此所有业务逻辑都应该在单独的类中,控制器在调用时会简单地启动。如果您的控制器中确实有业务逻辑,那么您的代码将展示一个名为 Fat Controller 的反模式。
-
@GordonM 他/她没有对他的控制器进行单元测试。他/她正在做的是 functional testing 完全有效的控制器 - 至少就 Symfony 而言。
标签: php symfony authentication phpunit http-status-code-401