【问题标题】:Django test case failingDjango 测试用例失败
【发布时间】:2018-12-02 15:59:31
【问题描述】:

我对 Django 很陌生,但遇到了问题。我什至不确定这是否是一个愚蠢的问题。我想测试我的主页视图是否包含指向我的主题视图的链接,但是尽管一切就绪,但测试却失败了。任何帮助表示赞赏。它显示以下错误

Traceback (most recent call last):
  File "/home/abc/Desktop/python-environments/second/tutorial/myproject/boards/tests.py", line 26, in test_home_view_contains_link_to_topics_page
self.assertContains(self.response, 'href="{0}"'.format(board_topics_url))
  File "/home/abc/Desktop/python-environments/second/lib/python3.5/site-packages/django/test/testcases.py", line 369, in assertContains
self.assertTrue(real_count != 0, msg_prefix + "Couldn't find %s in response" % text_repr)
AssertionError: False is not true : Couldn't find 'href="/boards/1/"' in response

这是我的文件

urls.py

from django.urls import path
from . import views


app_name = 'boards'
urlpatterns = [
path('', views.home, name='home'),
path('<int:d>/', views.topics, name='topics'),

]

views.py

from django.shortcuts import render, get_object_or_404
from .models import Board, topic


def home(request):
    boards = Board.objects.all()
    return render(request, 'boards/index.html', {'boards': boards})

def topics(request, d):
    board = get_object_or_404(Board, id=d)
    return render(request, 'boards/topics.html', {'boards': board})

index.html

{% load static %}<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Boards</title>
    <link rel="stylesheet" href="{% static 'boards/css/bootstrap.min.css'     %}">
  </head>
  <body>
    <div class="container">
      <ol class="breadcrumb my-4">
        <li class="breadcrumb-item active">Boards</li>
      </ol>
      <table class="table">
        <thead class="thead-inverse">
          <tr>
            <th>Board</th>
            <th>Posts</th>
            <th>Topics</th>
            <th>Last Post</th>
          </tr>
        </thead>
        <tbody>
          {% for board in boards %}
            <tr>
              <td>
                  <a href = "{% url 'boards:topics' board.id %}"> {{board.Name }}</a>
                <small class="text-muted d-block">{{ board.description}}</small>
              </td>
              <td class="align-middle">0</td>
              <td class="align-middle">0</td>
              <td></td>
            </tr>
          {% endfor %}
        </tbody>
      </table>
    </div>
  </body>
</html>

最后是tests.py

from django.test import TestCase
from django.urls import reverse, resolve
from .models import Board
from .views import topics, home


class HomeTests(TestCase):

    def setUp(self):
        self.board = Board.objects.create(Name='Python',description='Python discussion board')
        self.response = self.client.get(reverse('boards:home'))

def test_home_view_status_code(self):
    self.assertEquals(self.response.status_code, 200)

def test_home_url_resolves_to_home_view(self):
    view = resolve('/boards/')
    self.assertEquals(view.func, home)

def test_home_view_contains_link_to_topics_page(self):
    board_topics_url = reverse('boards:topics', kwargs={'d': self.board.id})
    self.assertContains(self.response, 'href="{0}"'.format(board_topics_url))

【问题讨论】:

  • 使用原始字符串操作测试 html 内容可能有点棘手(空格、引用等)。最好为此使用适当的 HTML 解析器。
  • 你有什么好的 html 解析器吗?

标签: python django python-3.x django-templates django-views


【解决方案1】:

self.assertContains(self.response, 'href="{0}"'.format(board_topics_url))

你没有忘记= 周围的空格吗?无论如何,您都可以在浏览器中打开您的页面并检查其 html 代码。

【讨论】:

  • 好的。在“=”周围引入空格使测试通过。我现在很高兴,但我仍然不明白为什么它失败了。我的页面在浏览器中打开时的 html 代码在 = 周围没有空格。
  • 好吧,你的模板中有空格,所以它们应该出现在response中。谈到您的浏览器 - 我不愿回答。能不能给个截图?
  • 我猜 Firefox Inspector 可以重新格式化代码以便于阅读。试试“查看源代码”(developer.mozilla.org/en-US/docs/Tools/View_source)
猜你喜欢
  • 2020-12-15
  • 1970-01-01
  • 2011-02-16
  • 2016-01-08
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
相关资源
最近更新 更多