Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:';问题';对象在测试用例断言中不可iterable_Python_Django - Fatal编程技术网

Python 类型错误:';问题';对象在测试用例断言中不可iterable

Python 类型错误:';问题';对象在测试用例断言中不可iterable,python,django,Python,Django,我正在测试上下文变量是否包含字符串 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.con

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

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>')
def测试过去的问题(自我):
过去的问题=创建问题(问题文本=过去的问题,天数=-30)
response=self.client.get(反向('polls:detail',args=(pass_question.id)))
self.assertquerystequal(response.context['question'],'')
但它会抛出以下错误:

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

----------------------------------------------------------------------在0.069秒内运行了10个测试

销毁别名“default”的测试数据库失败(错误=1)

在命令行中:

>>> 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
来自django.test.utils导入设置\u测试\u环境的
>>
>>>设置测试环境()
>>>从django.test导入客户端
>>>client=client()
>>>从django.url反向导入
>>>response=client.get(反向('polls:detail',args=(1,))
>>>response.context
[{'True':True,'False':False,'None':None},{'messages':,'perms':,'user':,'csrf_-token':,'request':,'DEFAULT_-MESSAGE_-LEVELS':{'DEBUG':10,'INFO':20,'SUCCESS':25,'WARNING':30,'ERROR':40},{},{},{'object':,'view':}]
>>>响应.上下文[“问题”]

通常,如果变量名是单数(
'question'
是singluar),这意味着这可能不是
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)
def测试过去的问题(自我):
过去的问题=创建问题(问题文本=过去的问题,天数=-30)
response=self.client.get(反向('polls:detail',args=(pass_question.id)))

self.assertEqual(response.context['question'],pass_question)
基于名称,
response.context['question']
不是一个
QuerySet
,而是一个
question
对象,而且它也可能不是字符串。@Willem Van Onsem那么我该如何测试它呢,先生?response.context?或者,是内容?还有AssertQuerySetQual检查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)