Есть ли лучший способ написать эти тесты? - PullRequest
0 голосов
/ 04 апреля 2019

Итак, в основном, тест работает, он говорит «ОК», когда я кладу в консоль

python3 manage.py test apps/diary

, но дело в том, что когда я проверяю другие источники, особенно WS Vincent (https://wsvincent.com/))способ делать тесты, он более чистый, он не должен беспокоиться о том, аутентифицирована ли сессия, создающая объект, или нет, или я так думаю.

Так что в моем коде все это просто какой-товременные испытания того, что должно быть хорошо написанным тестом, просто потому, что я не могу придумать другой способ сделать это. Я читал эту статью «лучшие практики» в тестировании, как в https://realpython.com/testing-in-django-part-1-best-practices-and-examples/,, но он все еще нене считаю его полезным.

Вот фрагмент моего кода, класс Test: class 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 Ответ

1 голос
/ 05 апреля 2019

Это действительно широкий вопрос.Я настоятельно рекомендую этот пост о том, как писать хорошие тесты в Django-Projects:

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

В нем приведены отличные примеры для тестирования представлений, как вы пытаетесь в своем фрагменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...