python - 为什么我在 Django 中的测试函数在 chrome 浏览器中正确显示页面时返回状态代码 404?

标签 python django testing http-status-code-404

我是 Django 新手,我正在尝试进行简单的应用程序测试,并且我遵循教程 (simpleisbetterthancomplex)。其中一项测试失败,但我找不到原因。我添加了几张图片以清楚发生了什么。

失败的测试函数是:

from django.core.urlresolvers import reverse
from django.urls import resolve
from django.test import TestCase
from .views import home, board_topics
from .models import Board

# some code here

class BoardTopicsTests(TestCase):
#....
    def test_board_topics_view_contains_navigation_links(self):
        board_topics_url = reverse('board_topics', kwargs={'pk': 1})
        print("49: board_topic = " + board_topics_url)
        homepage_url = reverse('home')
        print("51: homepage_url = " + homepage_url)
        new_topic_url = reverse('new_topic', kwargs={'pk': 1})
        print("53: new_topic_url = " + new_topic_url)
        response = self.client.get(board_topics_url)
        print("*****************\n")
        print(response)
        print('********************\n')
        self.assertContains(response, 'href="{0}"'.format(homepage_url))
        self.assertContains(response, 'href="{0}"'.format(new_topic_url))
#...

然后我可以看到输出:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.49: board_topic = /boards/1/
51: homepage_url = /
53: new_topic_url = /boards/1/new/
*****************

<HttpResponseNotFound status_code=404, "text/html">
********************

board_topics_url 似乎无效。但在我的 chrome 资源管理器中它工作得很好并返回一个包含两个链接的页面 homepage_url = '/' 和 new_topic_url = '/boards/1/new/':

 ...      
  <li class="breadcrumb-item"><a href="/">Boards</a></li>
  <li class="breadcrumb-item active">Django</li>
      </ol>

    <div class="mb-4">
        <a href="/boards/1/new/" class="btn btn-primary">New topic</a>
    </div>
...

两个链接都正常工作。

拜托,知道哪里出了问题吗?非常感谢您的帮助。

最佳答案

在几次测试中,样本记录被反复创建和删除。因此 id 不是 1 而是一些更大的数字。检测当前记录的 ID 解决了这个问题:

    def test_board_topics_view_contains_navigation_links(self):
        boards_list = Board.objects.all()        #### added line
        board_topics_url = reverse('board_topics', kwargs={'pk': boards_list[0].id}) ### replaced 1 by boards_list[0].id
        homepage_url = reverse('home')
        new_topic_url = reverse('new_topic', kwargs={'pk': boards_list[0].id})  ### replaced 1 by boards_list[0].id
        response = self.client.get(board_topics_url)
        self.assertContains(response, 'href="{0}"'.format(homepage_url))
        self.assertContains(response, 'href="{0}"'.format(new_topic_url))

关于python - 为什么我在 Django 中的测试函数在 chrome 浏览器中正确显示页面时返回状态代码 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59349034/

相关文章:

python - 当我运行 ' FileNotFoundError: [Errno 2] No such file or directory:' 时,为什么我在终端中收到 `python ./train.py`

python - 这是 pandas 0.17 中的 `Series.plot` 的错误吗?

python - python PyQt4 中 sys.argv 的用途是什么

python - 创建第一个 Django 项目 : admin webpage will not open

mysql - Django - 操作错误 : (1054, "Unknown column ' xx' 在 'field list' 中“)

testing - 我如何在 mink/behat 测试中指定顺序?

ruby-on-rails - FactoryGirl - 无法写入未知属性和未定义方法 `name'

Django 测试 : mock user login

python - Django::引用外键

django - 通过另一个类的最新创建的对象查询一个类