【发布时间】:2019-04-10 20:20:09
【问题描述】:
Laravel v5.7.1
我有多个具有相同断言的测试,并希望将它们移动到一个函数中并从测试中调用它。下面是函数示例:
private function admin_only($url, $method = 'GET', $data = []) {
// \Auth::logout();
$response = $this->json($method, $url, $data);
$response->assertStatus(401);
$response = $this->actingAs($this->user(),'api')->json($method, $url, $data);
$response->assertStatus(403);
$response = $this->actingAs($this->admin(),'api')->json($method, $url, $data);
$response->assertStatus(200);
}
在此我首先检查未经身份验证的用户,一切都按预期工作,但是有一些函数,API 调用会切换某些状态,所以我想通过第二次调用函数来恢复它:
$this->admin_only('/api/service/toggle-state', 'POST', $data);
$this->admin_only('/api/service/toggle-state', 'POST', $data);
第二次调用相同的测试导致失败,因为第一个 $this->json() 用作管理员并返回成功代码。
\Auth::logout() 应该解决问题,但却抛出错误 BadMethodCallException: Method Illuminate\Auth\RequestGuard::logout does not exist.
诸如“第二次通话单独测试”、“无切换还原”、“非管理员用户和访客的响应代码相同”之类的解决方案应该可以工作,但对我来说似乎是错误的。
【问题讨论】:
-
您是否尝试将
Auth与use Illuminate\Support\Facades\Auth;一起使用,然后在没有\ 的情况下使用Auth::logout()? -
刚刚试了一下,还是一样的错误。
标签: laravel unit-testing