Laravel & phpunit 设置预期的 http 错误代码
Posted
技术标签:
【中文标题】Laravel & phpunit 设置预期的 http 错误代码【英文标题】:Laravel & phpunit set expected http error code 【发布时间】:2017-02-04 14:01:25 【问题描述】:我正在编写一些测试。这是我的测试:
/** @test */
public function a_normal_user_cannot_access_the_admin_panel()
// Note: This is a regular user, not an admin
$user = factory(User::class)->create();
$this->actingAs($user);
$this->visit('/admin');
// ????
在我的MustBeAdministrator.php
中间件中:
public function handle($request, Closure $next)
$user = $request->user();
if ($user && $user->isAdmin)
return $next($request);
abort(403);
当我访问 /admin
时,中间件中止并出现 403 错误。我如何用 phpunit 断言抛出了 http 错误?我知道$this->setExpectedException()
,但我无法让它与 http 错误一起工作。我做错了吗?
注意:我对 phpunit 非常陌生,也有例外,如果这是一个愚蠢的问题,我很抱歉。如果您需要任何其他文件,这里是repo for this project,或者您可以直接询问。
【问题讨论】:
嘿,你可以发布自己问题的答案,不被禁止:) @iScrE4m 我确实回答了它,但我不会让我在 2 天内接受它作为答案:( 我会接受它。 哦,抱歉,我没有注意到,所以没有在评论中显示:) 【参考方案1】:$user = factory(User::class)->create();
$this->actingAs($user);
$this->setExpectedException('Symfony\Component\HttpKernel\Exception\HttpException');
$this->get('/admin');
throw $this->response->exception;
Found this article。添加setExpectedException
行、throw
行并将visit
更改为get
似乎解决了我的问题
【讨论】:
@MihkelAllorg SO 不会让我再接受 2 个小时。那我会的。【参考方案2】:如果你想得到完整的响应对象,你可以使用call
方法
/** @test */
public function a_normal_user_cannot_access_the_admin_panel()
// Note: This is a regular user, not an admin
$user = factory(User::class)->create();
$this->actingAs($user);
$response = $this->call('GET', '/admin');
$this->assert(403, $response->status());
【讨论】:
以上是关于Laravel & phpunit 设置预期的 http 错误代码的主要内容,如果未能解决你的问题,请参考以下文章
使用 PhpStorm 在 Laravel 中运行单一功能测试
Laravel & PHPUnit : 允许进程隔离以防止 Mysql Too many connections 错误
如何从 PHPUnit 测试设置运行 Laravel 数据库播种机?