Как переопределить параметры запроса $request в phpunit

Я изменяю значение параметра запроса 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",

Используйте внедрение зависимостей. Смоделируйте класс запроса и зарегистрируйте его в контейнере.

user7309871 26.09.2023 19:44

@marius-ciclistu определенно НЕ делайте этого, НИКОГДА не издевайтесь над запросом или контроллером... проверьте мой профиль, ПОЧЕМУ не делать этого...

matiaslauriti 26.09.2023 20:40

Автор, я провожу локальный тест на вашем примере, используя ->get и ->getJson, и он работает безупречно... вы должны поделиться своим полным методом тестирования, а также попробовать ->get, просто чтобы посмотреть, работает ли он или все еще не работает. Если он не будет работать с ->get из-за промежуточного программного обеспечения, добавьте $request->dump(); после строки слияния и посмотрите, какой будет вывод при запуске теста.

matiaslauriti 26.09.2023 20:48

@matiaslauriti Я имел в виду утверждение, что слияние называется.

user7309871 26.09.2023 22:09

@matiaslauriti, можете ли вы переопределить предоставленный параметр запроса? В тестовом примере я утверждаю, что данные ответа тестового примера имеют длину.

Bhautik Chudasama 27.09.2023 04:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле Spatie\QueryBuilder\QueryBuilder новый запрос не принимается. Это было исправлено обратным вызовом allowedFilters.

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

Итак, проблема полностью отличалась от того, что вы опубликовали, как это исправит тест? как это работает при обычном доступе, но не работает при тесте?

matiaslauriti 27.09.2023 11:08

Я думаю, $v не получаю измененное значение параметра запроса. Но обратный звонок решил мою проблему. Спасибо @matiaslauriti за ваши усилия.

Bhautik Chudasama 27.09.2023 12:23

Другие вопросы по теме