我正在使用Laravel 5.1,我正在尝试测试我的控制器。
我为不同的操作定义的用户和策略有多个角色。首先,每个请求都需要由经过身份验证的用户进行,因此运行没有用户的测试会按预期返回401 Unauthorized。
但是当我想测试授权用户的功能时,我仍然会收到401 Unauthorized状态代码。
值得一提的是,我在这些控制器上使用了基本的无状态HTTP身份验证。
我尝试了以下内容:
public function testViewAllUsersAsAdmin()
{
$user = UserRepositoryTest::createTestAdmin();
Auth::login($user);
$response = $this->call('GET', route('users.index'));
$this->assertEquals($response->getStatusCode(), Response::HTTP_OK);
}
和
public function testViewAllUsersAsAdmin()
{
$user = UserRepositoryTest::createTestAdmin();
$response = $this->actingAs($user)
->call('GET', route('users.index'));
$this->assertEquals($response->getStatusCode(), Response::HTTP_OK);
}
还有这个(如果我的新用户有任何问题,那就不应该)
public function testViewAllUsersAsAdmin()
{
$user = User::find(1);
$response = $this->actingAs($user)
->call('GET', route('users.index'));
$this->assertEquals($response->getStatusCode(), Response::HTTP_OK);
}
但是在每种情况下我都得到一个401响应代码,所以我的测试失败了。
当以虚拟用户身份登录时,我可以使用邮递员访问路线。
我的想法已经不多了,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
通过一些实验,我发现问题存在于我的身份验证中间件中。由于我希望API是无状态的,因此身份验证如下所示:
public function handle($request, Closure $next)
{
return Auth::onceBasic() ?: $next($request);
}
显然,用我的方式验证用户是不可能的。
我的解决方案只是在每次测试开始时使用WithoutMiddleware
特征或$this->withoutMiddleware()
来禁用中间件。