有没有更好的方式编写这些测试?

时间:2019-04-04 11:54:54

标签: python testing django-testing django-2.1

因此,基本上,该测试有效,当我将其放入控制台时,它说“确定”。

python3 manage.py test apps/diary

但是问题是,当我检查其他来源时,尤其是W.S.文森特(https://wsvincent.com/)的测试方式,它非常干净;

不必担心创建对象的会话是否已通过身份验证。

因此,在我的代码中,这些只是对编写好的测试的某种改编,只是因为我无法想到另一种方式。我已经在https://realpython.com/testing-in-django-part-1-best-practices-and-examples/中阅读了有关测试的“最佳实践”文章,但仍然没有帮助。

这是我的代码的一个片段,一个Test类: 类DetailViewTest(TestCase):

def setUp(self):
    self.user = get_user_model().objects.create_user(
        username='testuser', email='test@email.com',
        password='secretpw', first_name='John',
        last_name='Doe'
    )
    self.client.force_login(self.user)
    self.client.post(reverse('diary:add'), {
        'title': 'Test Title',
        'author': self.user,
        'content': 'Loren ipsum'
    })
    self.client.logout()
    self.user2 = get_user_model().objects.create_user(
        username='testuser2', email='test2@email.com',
        password='secretpw', first_name='John',
        last_name='Doe'
    )
    self.client.force_login(self.user2)
    self.client.post(reverse('diary:add'), {
        'title': 'Test Title',
        'author': self.user,
        'content': 'Loren ipsum'
    })
    self.client.logout()

def test_view_url_exists_at_proper_location(self):
    self.client.force_login(self.user)
    response = self.client.get('/post/1/')
    self.assertEqual(response.status_code, 200)

def test_view_uses_correct_template(self):
    self.client.force_login(self.user)
    response = self.client.get('/post/1/')
    self.assertEqual(response.status_code, 200)
    self.assertTemplateUsed(response, 'diary/post_detail.html')

def test_cannot_view_others_post(self):
    self.client.force_login(self.user2)
    response = self.client.get('/post/1/')
    self.assertEqual(response.status_code, 404)

(无论如何,这里是完整代码:https://pastebin.com/6ufabmJP

此外,我一直在想是否可以将Test类继承给其他人,或者是否在创建db对象之前总是必须登录,以及是否在能够登录之前必须创建用户。 >

帮助和技巧将不胜感激。谢谢〜

1 个答案:

答案 0 :(得分:1)

那确实是一个广泛的问题。一世  强烈推荐这篇关于如何在Django-Projects中编写好的测试的文章:

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Testing

它为您提供了测试视图的绝佳示例,就像您尝试使用代码段一样。