Pytest: Тест редактирования представления пользователем, объект не обновляется
Я хочу протестировать представление account_edit, правильно ли обновляется информация о пользователе/клиенте. Я новичок в pytest.
Вид:
@login_required
def account_edit(request):
if request.method == "POST":
user_form = UserEditForm(instance=request.user, data=request.POST)
if user_form.is_valid():
user_form.save()
else:
user_form = UserEditForm(instance=request.user)
return render(request, "account/user/edit_account.html", {"user_form": user_form})
Factory:
class CustomerFactory(factory.django.DjangoModelFactory):
class Meta:
model = Customer
django_get_or_create = ("email",)
email = "user1@gmail.com"
name = "user1"
mobile = "123456789"
password = "user1"
is_active = True
test_account_views.py:
@pytest.mark.django_db
def test_account_edit_post(client, customer_factory):
user = customer_factory.create()
client.force_login(user)
response = client.post(
"/account/edit/",
data={
"name": "newname",
"email": "newemail@gmail.com",
},
)
print(user.name)
assert response.status_code == 200
Когда я распечатываю письмо print(user.name), я ожидаю, что оно будет обновлено newname. Однако получаю старое (user1) И статус ответа тоже OK: 200. Так что, похоже, проблема в том, что пользователь не обновляется. Проблема в коде тестирования, а не в самом приложении django (проверил). Заранее спасибо за любую помощь.
Вы печатаете user.name пользователя, который вы уже получили из базы данных. После его изменения в POST запросе вам необходимо обновить его с помощью метода refresh_from_db()
следующим образом user.refresh_from_db()
then print user.name