我目前在使用 Laravel 作为 API-only 后端时遇到了一些问题。我想单独开发前端,因此仅将 Laravel 视为 API。我在编写测试时遇到问题。我仍在使用网络中间件组(不是 API),并且在使用auth
中间件时,例如在使用邮递员进行测试时一切正常,但在编写测试时。
例子
public function search_competitions_unauthorized ()
{
$response = $this->get('/competitions/ABCDEFG');
$response->assertStatus(401);
}
端点/competitions/ABCDEFG
受 auth 中间件保护。
我收到 500 作为响应代码,因为没有login
定义名称的路由。这很容易解决(创建一个名为 login 的路由),但我希望 Laravel 将每个请求都视为没有任何重定向的 API 请求。
我已经尝试了一些方法来摆脱这种行为。
我定义了一个新的类“DefaultRequest”,它扩展Illuminate\Http\Request
class DefaultRequest extends Request
{
public function expectsJson()
{
return true;
}
public function wantsJson()
{
return true;
}
}
我更改了公共文件夹中的 index.php。
$response = $kernel->handle(
$request = App\Http\Requests\DefaultRequest::capture()
);
此外,我的控制器中使用的所有请求都将其用作默认值。由于我在请求验证方面遇到了同样的问题,因此我也将此方法添加到了我的默认请求中。
protected function failedValidation(Validator $validator)
{
throw new HttpResponseException(response()->json($validator->errors(), 422));
}
我觉得这应该更容易解决。一般来说,这对我来说只是测试时的问题,我可以在测试中设置特定的标题。但是我想禁用所有这些重定向行为,因为我从不希望这些用于项目。