当前位置: 首页 > 知识库问答 >
问题:

问题对象在测试用例断言中是不可迭代的

汲涵育
2023-03-14

我正在测试上下文变量是否包含字符串

def test_past_question(self):
    past_question = create_question(question_text='past question',days=-30)
    response = self.client.get(reverse('polls:detail',args=(past_question.id,)))    
    self.assertQuerysetEqual(response.context['question'],'<Question: past question>')

但它抛出以下错误:

(mysite)sugumar@mysitedotcom:~/python/html" target="_blank">html" target="_blank">django/mysite$python manage.py测试轮询正在为别名“default”创建测试数据库。。。系统检查未发现任何问题(0静音)。E……....==============================================================================================================================================================================================================================================================================================================================================================================错误:test_pass_question(polls.tests.QuestionDetailViewTests)-------------------------------------------------------------回溯(最近一次调用):文件“/home/sugumar/python/django/mysite/polls/tests.py”,第73行,在test_pass_question self.assertquerystequal(response.context['question'],'')文件中“/home/sugumar/.local/share/virtualenvs/mysite VWHaFuat/lib/python3.5/site packages/django/test/testcases.py”,第946行,在AssertQuerystequal items=map(transform,qs)TypeError中:“问题”对象不可编辑

---------------------------------------------------------------------- 在0.069s中运行了10个测试

正在销毁别名默认值的测试数据库...

在命令行中:

>>> from django.test.utils import setup_test_environment
>>> setup_test_environment()
>>> from django.test import Client
>>> client = Client()
>>> from django.urls import reverse
>>> response = client.get(reverse('polls:detail',args=(1,)))
>>> response.context
[{'True': True, 'False': False, 'None': None}, {'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0xb74425ec>, 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0xb69feecc>, 'user': <SimpleLazyObject: <function AuthenticationMiddleware.process_request.<locals>.<lambda> at 0xb7440bfc>>, 'csrf_token': <SimpleLazyObject: 'FrAJ52rWG57SSbSE9y4V2tammjvQqjBUyl2tK6aEzj8ZfENSyFl7Fy05bnQh3XyQ'>, 'request': <WSGIRequest: GET '/polls/1/'>, 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}}, {}, {'object': <Question: What's Up?>, 'question': <Question: What's Up?>, 'view': <polls.views.DetailView object at 0xb6a2fd4c>}]
>>> response.context['question']
<Question: What's Up?>
>>> exit

在命令里看到了吗?我试过了

 self.assertQuerysetEqual(response.context['question'],'<Question: past question>')

共有1个答案

戎劲
2023-03-14

通常,如果变量名是单数('问题是单数),这意味着这可能不是QuerySet(或多或少是一个集合),而是一个单一的问题对象。

此外,对象(如问题对象)和它的文本表示(如')之间存在差异

因此,您应该检查与过去的问题是否相等,如:

def test_past_question(self):
    past_question = create_question(question_text='past question',days=-30)
    response = self.client.get(reverse('polls:detail',args=(past_question.id,)))    
    self.assertEqual(response.context['question'], past_question)

 类似资料:
  • 本文向大家介绍python判断一个对象是否可迭代的例子,包括了python判断一个对象是否可迭代的例子的使用技巧和注意事项,需要的朋友参考一下 如何判断一个对象是可迭代对象? 方法是通过collections模块的Iterable类型判断: 以上这篇python判断一个对象是否可迭代的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: …引发错误: 我想通过将每个数字相加来找出总数,例如110。1 + 1 + 0 =2。我该怎么做? 谢谢 问题答案: 首先,不要再调用-您正在将字符串转换为整数,这不是您想要的(您希望将每个字符视为自己的数字)。更改: 至: 现在这是一个数字字符串,您可以逐个数字地对其进行循环。 接下来,将一些初始值分配给-就像您现在的代码一样,由于您从未初始化它,因此将获得一个。大概您想在循环之前。

  • 问题内容: 我正在尝试迭代由numpy.linspace生成的值的数组: 这段代码在我的办公室计算机上工作正常,但是今天早上我坐下来在另一台机器上在家工作,出现了此错误: 只是一个浮点数数组,脚本在打印内容时没有问题-只是显然对它们进行了迭代。关于导致它损坏的原因的任何建议以及可能的解决方法? 问题答案: 给您一维NumPy数组。例如: 因此: 无法工作。您将需要某种二维数组,在第二维中具有两个元

  • 问题内容: 我正在尝试运行一个for循环。这是我遇到问题的代码部分: 因此,我的目的是遍历aldurstengd_ororka,对于字典中的每个“年龄”元组,我为元组中的每个“项目”运行另一个for循环。我得到的错误是 TypeError:“ int”对象不可迭代 问题答案: 如果是字典,则此表达式: 是一个错误。也许您的意思是: 编辑:您看到的错误是非常有趣的,我确实使用此代码段重现了它: 代码

  • 问题内容: 我正在尝试从Wikipedia主页提取所有链接,但是此代码显示TypeError:“ WebElement”对象不是可迭代的错误。 问题答案: 问题是您正在使用哪个仅返回一个WebElement(不可迭代),即返回一个WebElement列表。 解决方案:替换为 参考:Selenium-Python文档

  • 我目前正在面对mapstruct和它的初学者问题,其中一个是以下问题。 我知道示例方案:https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable 希望对象结构清晰。在源代码中有两个列表,应该为每个列表选择第一个元素。MapStruct如何做到这一点?