【发布时间】:2014-05-30 13:01:22
【问题描述】:
我是 Django 或 python 的新手,但我目前正在与这两个项目一起工作。现在我试图让我的测试工作。大约 3 个月前,我编写了这些简单的测试,我 100% 确定它们当时有效。此外,当我运行服务器并手动尝试不同的搜索时,我得到了预期的结果,所以我知道视图至少是正确的(我知道它可怕且缓慢,我会努力修复它)。我已经搜索过这个错误,但我发现唯一相关的是 Ubuntu 是我的问题,但我在 Ubuntu 和 Windows 7 上都试过了。我不知道从那时到现在发生了什么,但他们给了我以下错误:
编辑:我不知道为什么我所有的缩进都被忽略了:|哦,好吧,经过一些建议,我改变了一些东西,现在我遇到了这样的失败:
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,},)
感谢您的帮助。
【问题讨论】:
-
只是为了检查一下,如果您暂时删除
@login_required装饰器并再次运行测试会发生什么? -
你还能断言
response.status_code == 200吗? -
@alecxe omg 我不敢相信这有效,哈哈,现在我得到一个错误:AssertionError[]!=[],这很奇怪,但至少它现在有点工作
标签: python django unit-testing