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 了解更多详情。
这可能不是最好的方法,因为我正在学习如何使用 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 了解更多详情。