有没有更好的方法来编写这些测试?
Is there a better way to write these tests?
所以基本上,测试有效,当我输入控制台时它说 OK
python3 manage.py test apps/diary
但问题是,当我检查其他来源时,尤其是 W.S。 Vincent(https://wsvincent.com/) 做测试的方式,比较干净;它不必担心创建对象的会话是否经过身份验证,我认为是这样。
所以在我的代码中,这些都只是对应该是编写良好的测试的某种权宜之计,只是因为我想不出另一种方法。我已经像 https://realpython.com/testing-in-django-part-1-best-practices-and-examples/ 一样阅读了这篇 'best practices' 测试文章,但它仍然没有帮助。
这是我的代码片段,测试 class:
class 细节视图测试(测试用例):
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 classes继承给其他人,或者我是否总是在创建db对象之前必须登录,以及我是否总是必须在之前创建用户能够登录。
非常感谢您的帮助和提示。谢谢~
这真是一个宽泛的问题。我
强烈推荐 post 关于如何在 Django 项目中编写好的测试:
https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Testing
它为您提供了很好的测试视图的示例,就像您在代码段中尝试的那样。
所以基本上,测试有效,当我输入控制台时它说 OK
python3 manage.py test apps/diary
但问题是,当我检查其他来源时,尤其是 W.S。 Vincent(https://wsvincent.com/) 做测试的方式,比较干净;它不必担心创建对象的会话是否经过身份验证,我认为是这样。
所以在我的代码中,这些都只是对应该是编写良好的测试的某种权宜之计,只是因为我想不出另一种方法。我已经像 https://realpython.com/testing-in-django-part-1-best-practices-and-examples/ 一样阅读了这篇 'best practices' 测试文章,但它仍然没有帮助。
这是我的代码片段,测试 class: class 细节视图测试(测试用例):
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 classes继承给其他人,或者我是否总是在创建db对象之前必须登录,以及我是否总是必须在之前创建用户能够登录。
非常感谢您的帮助和提示。谢谢~
这真是一个宽泛的问题。我 强烈推荐 post 关于如何在 Django 项目中编写好的测试:
https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Testing
它为您提供了很好的测试视图的示例,就像您在代码段中尝试的那样。