Django 2.1测试问题

时间:2018-12-02 01:34:38

标签: django django-tests

首先感谢您的宝贵时间,对我的英语感到抱歉。

在学习Django时,我用python进行了数年的开发,因此决定开始检查此Framework。而且我得到了一个奇怪的答复。我在编写TestCase时,在Test外部完全可以正常工作。

那是代码:

class BoardTopicsTests(TestCase):
    # Hago las acciones necesarias para empezar el test
    def setUp(self):
        self.board = Board(name="Django", description="Django board.")
        # self.board.save()

    # Compruebo el status_code 200
    def test_board_topics_view_status_code(self):
        # self.board.save()
        url = reverse("board_topics", kwargs={"pk":1})
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    # Compruebo el status_code 404
    def test_board_topics_view_not_found_status_code(self):
        url = reverse("board_topics", kwargs={"pk" : 99})
        response = self.client.get(url)
        self.assertEqual(response.status_code, 404)

    # Compruebo que resuelve bien el board
    def test_board_topics_url_resolves_board_topics_views(self):
        view = resolve("/boards/1/")
        self.assertEqual( view.func.__name__, BoardTopics.as_view().__name__ )

如果我将木板保存在setUp中,则方法test_board_topics_view_status_code返回404,如果我将木板保存在方法中,则返回200并通过测试。

我想我缺少了一些东西,因为我认为必须通过setUp方法保存它!

请,有人可以帮忙吗?这只是出于学习目的,因为我想知道那里发生了什么。

如果我在test_board_topics_view_status_code内进行print(self.board.id),它会返回1。

非常感谢您!

1 个答案:

答案 0 :(得分:-1)

经过研究后,我提出了解决方案:

@classmethod
def setUpTestData(cls):
    Board.objects.create(name="Django", description="Django board.")

代替:

def setUp(self):
    self.board = Board(name="Django", description="Django board.")
    self.board.save()

它可以工作,但是我试图对另一个类做同样的事情,但404仍然返回...在那个特定的TestCase工作中,在另一个不起作用的情况下,o

我正在做更多研究,如果找到“最终”解决方案,我会回信。

更新:

最后我发现了问题!解决方案是下一个解决方案:

@classmethod
def setUpTestData(cls):
    self.board = Board.objects.create(name="Django", description="Django board.")

# Compruebo el status_code 200
def test_board_topics_view_status_code(self):
    url = reverse("board_topics", kwargs={"pk":self.board.pk})
    response = self.client.get(url)
    self.assertEqual(response.status_code, 200)

请注意,在kwarg中,pk的值为 self.board.pk ,而不是(这里是发生错误的地方)硬编码为1 ,因为我们不知道PK是否会成为1!哦,那个愚蠢的错误使我整夜无法入睡。

因此,最后我们可以在下一个继续:

  • 使用setUpTestData代替setUp添加数据
  • 不对pk进行硬编码,存储您已经插入的对象并返回pk

希望答案会有所帮助!

您的S3yk0