我是Django或python的新手,但我目前正在与两者合作。现在我试图让我的测试工作。我在3个月前编写了这些简单的测试,并且我100%肯定他们当时的工作。此外,当我运行服务器并手动尝试不同的搜索时,我得到预期的结果,所以我知道视图至少是正确的(我知道它的可怕和缓慢,我会努力修复它)。我搜索过这个错误,但我发现唯一相关的事情是Ubuntu是我的问题,但我在Ubuntu和Windows 7上都试过了。我不知道当时和现在之间发生了什么,但是他们给了我以下错误:< / p> 编辑:我不知道为什么我的所有缩进都被忽略了:|哦,经过一些建议,我改变了一些事情,现在我得到了这样的失败:
enrique@enrique-XPS-L521X:~/Documents/Reeduq$
python manage.py test Search
Creating test database for alias 'default'...
FF
======================================================================
FAIL: test_private_courses_search (Search.tests.SearchTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/enrique/Documents/Reeduq/Search/tests.py", line 18, in test_private_courses_search
self.assertEqual(response.context['found_entries'],[])
AssertionError: [] != []
======================================================================
FAIL: test_public_course_search (Search.tests.SearchTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/enrique/Documents/Reeduq/Search/tests.py", line 29, in test_public_course_search
self.assertEqual(response.context['found_entries'],['<Course: test>'])
AssertionError: [<Course: test>] != ['<Course: test>']
----------------------------------------------------------------------
Ran 2 tests in 0.018s
FAILED (failures=2)
Destroying test database for alias 'default'...
我读到这意味着我没有__unicode__
函数或类似的东西,但我的课程模型和用户模型各有一个,所以我不知道该怎么做呢
这是测试代码:
from django.test import TestCase
from django.shortcuts import render, get_object_or_404, redirect, render_to_response, redirect
from django.core.urlresolvers import reverse
from Search.views import search
from Course.models import *
from Reeduq_Home.models import *
class SearchTests(TestCase):
def test_private_courses_search(self):
"""
a search should not return private courses
"""
new_user=EndUser.objects.create(username="test", first_name="test", last_name="test", email="t@t.com", password="test", account_type="E")
Course.objects.create(name="test", instructor=new_user, description="test", tags="test", start_date="2014-3-9", end_date="2014-3-10", public=False)
response=self.client.get(reverse('Search:search', args=("test",)))
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(response.context['found_entries'],[])
def test_public_course_search(self):
"""
a search should return public courses
"""
new_user=EndUser.objects.create(username="test", first_name="test", last_name="test", email="t@t.com", password="test", account_type="E")
Course.objects.create(name="test", instructor=new_user, description="test", tags="test, wat, wait", start_date="2014-3-9", end_date="2014-3-10", public=True)
response=self.client.get(reverse('Search:search', args=("wat",)))
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(response.context['found_entries'],['<Course: test>'])
这是视图代码:
def search(request, query):
query=query.replace('_', ' ')
found_entries = []
objects = Course.objects.all()
for p in objects:
a=[x.strip() for x in p.tags.split(',')]
for i in a:
if i == query:
if p.public:
found_entries.append(p.id)
results = Course.objects.all().filter(pk__in=found_entries)
return render_to_response('search.html',
{ 'query': query, 'found_entries': results,},)
感谢您的帮助。
答案 0 :(得分:1)
不确定您在哪里获得unicode评论。
response.context['found_entries']
在幕后执行response.context.__get__item('found_entries')
,但response.context为None。
正如@AlexShkop指出的那样,听起来你的回答并不是你所期望的,可能是因为你实际上得到了302重定向(或401/403)。您可以尝试@ alecxe的建议,或使用内置的client.login功能(在创建虚拟用户之后)