#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})