[这可能不是最好的方法,因为我正在学习如何使用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),并且说两个文件是相同的?
然后怎么可能有错误?
很明显,如果您需要更多代码,我会发布它。
谢谢
问题是,您正在比较同一对象的两个不同实例。有关更多详细信息,请参见this。