无法获取POST单元测试以更新数据工作状态

问题描述 投票:0回答:1

我正在尝试在Selenium中进行单元测试,以检查我的POST是否可以在我的用户个人资料页面上运行(用户可以更新其个人资料信息)。我的问题是我无法使它正常工作(我无法获得用于更新用户电子邮件的单元测试)-我尝试了很多事情,但无法正确完成。

此测试返回:AssertionError:'[email protected]'!='[email protected]'

views.py

@login_required
def update_profile(request):

    if request.method == 'POST':
        u_form = UserUpdateForm(request.POST, instance=request.user)
        p_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user.profile)
        if u_form.is_valid() and p_form.is_valid():
           u_form.save()
           p_form.save()
           messages.success(request, f'Your account has been updated')
           return redirect('update_profile')
    else:
        u_form = UserUpdateForm(instance=request.user)
        p_form = ProfileUpdateForm(instance=request.user.profile)

    context = {
        'u_form' : u_form,
        'p_form' : p_form
    }

    return render(request, 'users/update_profile.html', context)

form.py

class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email']

test.py

def test_update_works(self):
        user = User.objects.create(username='testuser', email='[email protected]')
        self.client.force_login(user)
        self.client.post('/profile/update_profile',{'email': '[email protected]'},)
        self.assertEqual(user.email, '[email protected]')

谢谢。

django selenium django-forms tdd
1个回答
0
投票

在完成更新之前,您的旧用户信息已存储在内存中。您需要从数据库中“刷新”您的用户信息,然后对照新电子邮件进行检查。

def test_update_works(self):
    user = User.objects.create(username='testuser', email='[email protected]')
    self.client.force_login(user)
    self.client.post('/profile/update_profile',{'email': '[email protected]'},)
    user.refresh_from_db() # here you get the latest info
    self.assertEqual(user.email, '[email protected]')
© www.soinside.com 2019 - 2024. All rights reserved.