laravel - 使用依赖注入和自定义请求测试 Laravel API 资源
问题描述
从测试中调用时,类型提示的路由参数不会实例化。
我有一个 Laravel API 资源Route::apiResource('users', 'Api\UserController');
这是我在控制器中的更新方法:
public function update(UpdateUserRequest $request, User $user)
{
//
}
在 UpdateUserRequest 内部:
public function rules()
{
dd($this->route("user"));
}
如果我从 Postman 调用此端点,我会取回完整的user
对象。但是,如果我从测试中调用它:
$response = $this->actingAs($this->user)->
json('POST', '/api/users/'.$this->user->id, [
'_method' => 'PUT',
'data' => [
// ...
]
]);
我只得到字符串“1”,而不是实例化的用户对象。
解决方案
这可能是\Illuminate\Foundation\Testing\WithoutMiddleware
由您的测试用例使用的特征引起的。
对于后代,如果有人遇到这种情况,路由模型绑定由\Illuminate\Routing\MiddlewareSubstituteBindings
中间件执行。因此,该WithoutMiddleware
特征阻止它运行。
基本的 Laravel 测试用例提供了一种未记录的withoutMiddleware()
方法/Illuminate/Foundation/Testing/WithoutMiddleware
,您可以通过它来解决这个问题,但是值得注意的是,Laravel 的首席开发人员 Taylor Otwell建议尽可能使用所有激活的中间件进行测试。
推荐阅读
- angular - 以角度更改 intl-tel-input 字段宽度
- google-api - Youtube API 是否获得许可?
- tensorflow - 加载多个保存的 tensorflow/keras 模型进行预测
- sql - 雅典娜/普雷斯托 | 自加入时无法匹配 ID 行
- python - 高效切片三角稀疏矩阵
- tsql - SQL server 查询计算后得到结果
- javascript - 尝试将底部栏与响应式侧边栏放在一起
- ios - DispatchSemaphore 导致应用程序冻结,如何解决
- android-studio - 我在 Android Studio 中用颜色标记了这些文件夹
- r - 从sql中按组在R中选择具有最近日期的行