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

Вернуться на верх