Django 测试显示 Assertion:Error 即使断言为真

Django test showing Assertion:Error even if the assertion is true

这可能不是最好的方法,因为我正在学习如何使用 Django 进行测试,但是当我尝试测试涉及表单的视图时,我得到:

AssertionError: <User[37 chars], fields=(email;first_name;last_name;role;password1;password2)> != <User[37
chars], fields=(email;first_name;last_name;role;password1;password2)>

不考虑消息并没有真正帮助的事实,因为等式的两侧看起来完全一样,测试如下:

class SignUpViewTest(TestCase):

    def test_get_request(self):
        path = '/signup/'
        data = {
            'email': '',
            'first_name': '',
            'last_name': '',
            'role': 'Student',
            'password1': '',
            'password2': '',
        }
        form = UserCreationForm()
        response = self.client.get(path, data=data)
        print(response.context['form'])
        print(form)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.context['form'], form)

作为观点:

def signup(request):
    form = UserCreationForm()
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, f'Good news {form.cleaned_data["first_name"]}, you have successfully signed up.')
            return redirect(home)
    template_name = 'signup.html'
    context = {
        'form': form,
    }
    return render(request, template_name, context)

现在,如您所见,我正在打印两个表单(一个是响应上下文,一个是我请求的空表单。

我认为您不需要查看模型和表单中的代码,因为错误消息非常明确,即使您看不到错误。

此外,我在 Diffchecker 上检查了两个打印的语句(HTML),它说这两个文件是相同的?

那怎么会出错呢?

显然,如果您需要更多代码,我会 post 它。

谢谢

问题是您正在比较同一对象的两个不同实例。请参阅 this 了解更多详情。