Использование RequestFactory в тестовых представлениях, которые не находятся в urls.py

#django #testing #pytest

Вопрос:

Я хотел бы протестировать свой пользовательский декоратор (просто пользовательская защита, аналогичная @login_required ). Для этой цели я создаю два фиктивных представления:

 def foo(request):
    return JsonResponse('ok', safe=False)

@my_custom_decorator
def protected_foo(request):
    return JsonResponse('ok', safe=False)
 

Очевидно, что они не упоминаются в urls.py — это всего лишь простые представления, которые будут использоваться в модульном тесте.

Что я постараюсь сделать, так это просто:

 request = RequestFactory().get()  <== this is wrong
response = foo(request)
assert response.status_code == 200

# check if decorator works when no value is provided
failed_response = protected_foo(request)
assert failed_response.status_code == 403

# check if decorator works when the value is provided in GET
request = RequestFactory().get(f'?SECRET_VALUE={the_secret_value}')   <== this is wrong
response = protected_foo(request)
assert response.status_code == 200

# check if decorator works when the value is provided in GET
request = RequestFactory().post('', {'SECRET_VALUE': the_secret_value})   <== this is wrong
response = protected_foo(request)
assert response.status_code == 200
 

Мой вопрос — как передать данные в RequestFactory для запроса GET или POST, содержащего значения, когда представления не подключены к urls.py ?
Другими словами — что должно быть вместо строк, содержащих this is wrong ?

Комментарии:

1. Оказывается, путь (первый параметр) вообще не имеет значения, поэтому его можно создать таким образом: request = RequestFactory().get('anything', {'SECRET_VALUE': the_secret_value})