Я изменяю значение параметра запроса subject_type внутри контроллера, используя $request->merge, оно работает должным образом при отправке запроса с помощью браузера или любого клиента тестирования API. Но параметр запроса запроса не может быть переопределен в 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');
}
Здесь я не могу переопределить subject_type с помощью new_value.
Версия
"phpunit/phpunit": "^9.5.10"
"laravel/framework": "^9.19"
"spatie/laravel-query-builder": "^5.3",
@marius-ciclistu определенно НЕ делайте этого, НИКОГДА не издевайтесь над запросом или контроллером... проверьте мой профиль, ПОЧЕМУ не делать этого...
Автор, я провожу локальный тест на вашем примере, используя ->get и ->getJson, и он работает безупречно... вы должны поделиться своим полным методом тестирования, а также попробовать ->get, просто чтобы посмотреть, работает ли он или все еще не работает. Если он не будет работать с ->get из-за промежуточного программного обеспечения, добавьте $request->dump(); после строки слияния и посмотрите, какой будет вывод при запуске теста.
@matiaslauriti Я имел в виду утверждение, что слияние называется.
@matiaslauriti, можете ли вы переопределить предоставленный параметр запроса? В тестовом примере я утверждаю, что данные ответа тестового примера имеют длину.






На самом деле Spatie\QueryBuilder\QueryBuilder новый запрос не принимается. Это было исправлено обратным вызовом allowedFilters.
return QueryBuilder::for(User::class)
->allowedFilters([
AllowedFilter::callback('subject_type', function ($q, $v) {
$q->where('subject_type', 'new_value');
}),
]);
Итак, проблема полностью отличалась от того, что вы опубликовали, как это исправит тест? как это работает при обычном доступе, но не работает при тесте?
Я думаю, $v не получаю измененное значение параметра запроса. Но обратный звонок решил мою проблему. Спасибо @matiaslauriti за ваши усилия.
Используйте внедрение зависимостей. Смоделируйте класс запроса и зарегистрируйте его в контейнере.