2015-07-21 21 views
0

我一直在試圖找出我在django 1.8.3中創建的代碼是怎麼回事......當我使用django的測試運行器(以及更多具體的命令:python manage.py test predsite)我總是得到相同的錯誤消息:AssertionError:假是不正確的(Django版本1.8.3)

File "C:\Users\dimitris\djangop\oursite\predsite\tests.py", line 117, in test_long_list self.assertTrue('pagination' in response.content) AssertionError: False is not true

下面是我在細節創建的代碼:
OURSITE(PROJECT)>> PREDSITE(APP)>>模型。 PY:

from django.db import models 
from django.contrib.auth.models import User 
import os 


def hashed_uploads_dirs(instance, filename): 
    """Returns path with md5 hash as directory""" 
    return os.path.join(instance.md5, filename) 

class Datafile(models.Model): 
    file_id = models.IntegerField(default=0, primary_key=True) 
    datafile = models.FileField(upload_to='.') 
    user = models.ForeignKey(User, default=1) 
    md5 = models.CharField(max_length=32) 

OURSITE >> PREDSITE >> VIEWS.PY

class FileListView(ListView): 

    model = Datafile 
    queryset = Datafile.objects.order_by('-file_id') 
    context_object_name = "files" 
    template_name = "index.html" 
    paginate_by = 5 


class FileAddView(FormView): 

    form_class = DatafileForm 
    success_url = reverse_lazy('home') 
    template_name = "add.html" 


    def form_valid(self, form): 
     form.save(commit=True) 
     messages.success(self.request, 'File uploaded!', fail_silently=True) 
     return super(FileAddView, self).form_valid(form) 


class FileAddHashedView(FormView): 
    """This view hashes the file contents using md5""" 

    form_class = DatafileForm 
    success_url = reverse_lazy('home') 
    template_name = "add.html" 

    def form_valid(self, form): 
    hash_value = hashlib.md5(form.files.get('datafile').read()).hexdigest() 
    # form.save returns a new Datafile as instance 
    instance = form.save(commit=False) 
    instance.md5 = hash_value 
    instance.save() 
    messages.success(
     self.request, 'File hashed and uploaded!', fail_silently=True) 
    return super(FileAddHashedView, self).form_valid(form) 

OURSITE >> OURSITE >> URLS.PY

urlpatterns = patterns('', 
    url(r'^add/$', FileAddView.as_view(), name='datafile-add'), 
    url(r'^add/files/$', FileListView.as_view(), name='home'), 
) + static(settings.MEDIA_URL, datafile_root=settings.MEDIA_ROOT) 

OURSITE >> PREDSITE >> CONTEXT_PROCESSORS.PY

from django.conf import settings 


def static_root(request): 
    """ 
    Adds static-root context variables to the context. 

    """ 
    return {'STATIC_ROOT': settings.STATIC_ROOT} 


def media_root(request): 
    """ 
    Adds media-root context variables to the context. 

    """ 
    return {'MEDIA_ROOT': settings.MEDIA_ROOT} 

我們的網站>> PREDSITE >> FORM S.PY

class DatafileForm(forms.ModelForm): 
    """Upload files with this form""" 
    class Meta: 
     model = Datafile 
     exclude = ('md5',) 

OURSITE >> PREDSITE >> TESTS.PY(我提供了發生錯誤的部分)

def test_long_list(self): 
    """Get a paginated home page""" 
    filename = "./file_{}.txt" 
    for x in xrange(10): 
     fb = Datafile(datafile=filename.format(x)) 
     fb.save() 
    response = self.client.get(reverse('home')) 
    self.assertEqual(response.status_code, 200) 
    self.assertTrue('pagination' in response.content) 
    self.assertEqual(
     len(response.context['files']), 
     FileListView.paginate_by) 

而對於現在最重要的模板是以下: OURSITE >> TEMPLATES >> index.html的

{% extends "basic.html" %} 
 
{% load static %} 
 

 

 
{% block page_title %}Home{% endblock %} 
 

 

 
{% block content %} 
 

 

 
<h1>The files</h1> 
 

 

 
{% if files %} 
 

 
<div class="panel"> 
 
    <table> 
 
    <thead> 
 
     <tr> 
 
     <th>Primary Key</th> 
 
     <th>Filename</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
     {% for file in files %} 
 
     <tr> 
 
     <td>{{ file.file_id }}</td> 
 
     <td><a href="{% get_media_prefix %}{{ file.datafile }}">{{ file.datafile }}</a></td> 
 
     </tr> 
 
     {% endfor %} 
 
    </tbody>  
 
    </table> 
 
</div> 
 

 

 
{% if page_obj.has_other_pages %} 
 
<div class="pagination-centered"> 
 
    <ul class="pagination"> 
 
    {% if paginator.has_previous %} 
 
    <li class="arrow"><a href="?page={{ paginator.previous_page_number }}">&laquo;</a></li> 
 
    {% else %} 
 
    <li class="arrow unavailable"><a href="">&laquo;</a></li> 
 
    {% endif %} 
 
    {% for pg in paginator.page_range %} 
 
     {% if page_obj.number == pg %} 
 
     <li class="current"><a href="?page={{ pg }}">{{ pg }}</a></li> 
 
     {% else %} 
 
     <li><a href="?page={{ pg }}">{{ pg }}</a></li> 
 
     {% endif %} 
 
    {% endfor %} 
 
    {% if paginator.has_next %} 
 
    <li class="arrow"><a href="?page={{ paginator.next_page_number }}">&raquo;</a></li> 
 
    {% else %} 
 
    <li class="arrow unavailable"><a href="">&raquo;</a></li> 
 
    {% endif %} 
 
    </ul> 
 
</div> 
 
{% endif %} 
 

 

 
{% else %} 
 

 

 
    <!--      --> 
 
    <!-- Your database is empty --> 
 
    <!--      --> 
 

 
<div class="panel"> 
 
    <p>No files uploaded yet &nbsp;&nbsp; :(</p> 
 
    <p>(hint: Add a <a href="{% url 'datafile-add' %}" title="Add a file">file</a>)</p> 
 
</div> 
 

 
{% endif %} 
 

 

 
{% endblock %}

既然很明顯在上面的模板中有一個叫做「分頁」的類,那麼在執行測試運行器時我怎麼可能得到這個錯誤信息呢?

非常感謝,提前!

+5

歡迎計算器!請考慮發佈[mcve](http://stackoverflow.com/help/mcve)以獲得更快/更好的答案。 – Sait

+0

感謝您的建議,從現在開始我會記住這一點! –

回答

2

這是因爲responsecontext屬性返回的環境變量,這是html代碼。相反,如果那是您的目標,您將測試您要查找的項目的response.context['files']列表。

請嘗試使用assertContains代替。從文檔的語法暗示你可能要添加以下到您的測試:

self.assertContains(response, 'pagination', html=True) 
+0

我認爲你是正確的,因爲它涉及錯誤來自哪裏的來源......因爲它涉及到你建議的代碼,所以會導致這樣的結果:**文件「C:\ Python27 \ lib \ site-packages \ django \測試\測試用例。py「,第358行,在assertContains msg_prefix +」找不到%s的迴應「%text_repr> AssertionError:找不到'分頁'的迴應」** –

+0

我不知道你的數據在找什麼,所以也許'如果page_obj.has_other_pages'不是'true'? – GJStein