如何覆盖phpunit中的$request查询参数

uelo1irk  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(113)

我正在使用$request->merge修改控制器内部的subject_type查询参数值,它在使用浏览器或任何API测试客户端发送请求时按预期工作。但是request查询参数不能在phpunit中覆盖。

class UserController extends Controller
{
    public function index(Request $request)
    {
        $request->merge(['filter' => ['subject_type' => 'new_value']]);

        return QueryBuilder::for(User::class)
            ->allowedFilters([AllowedFilter::exact('subject_type')])
            ->allowedSorts(['created_at'])
            ->defaultSort('-created_at')
            ->paginate($request->query('per_page', config('pagination.default.per_page_limit')));
    }
}

这是我的测试用例

public function test_can_see_activity_log()
{
      $response = $this->getJson('/api/v1/users?filter[subject_type]=App\Models\Post');
}

这里我不能用new_value覆盖subject_type

版本号

"phpunit/phpunit": "^9.5.10"
"laravel/framework": "^9.19"
"spatie/laravel-query-builder": "^5.3",
wwodge7n

wwodge7n1#

实际上Spatie\QueryBuilder\QueryBuilder不接受新请求。已通过allowedFilters回调修复。

return QueryBuilder::for(User::class)
       ->allowedFilters([
               AllowedFilter::callback('subject_type', function ($q, $v) {
                  $q->where('subject_type', 'new_value');
               }),
        ]);

相关问题