Как я могу сделать такой типичный юнит-тест? - PullRequest
3 голосов
/ 10 мая 2010

Это простая структура в моем проекте:

MyAPP---
        note---
               __init__.py
               views.py
               urls.py
               test.py
               models.py
        auth--
              ...
        template---
                   auth---
                          login.html
                          register.html
                   note---
                          noteshow.html
                   media---
                           css---
                                 ...
                           js---
                                 ...
        settings.py
        urls.py
        __init__.py
        manage.py

Я хочу сделать юнит-тест, который может протестировать страницу заметок, работающую быстро или нет.

Код:

from django.test import TestCase

class Note(TestCase):
    def test_noteshow(self):
        response = self.client.get('/note/')
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, '/note/noteshow.html')

Проблема в том, что в моем проекте есть мод авторизации, он заставит unlogin перенаправлять пользователя на страницу login.html при посещении noteshow.html.

Итак, когда я запускаю свой юнит-тест, в bash возникает ошибка, когда response.status_code всегда равен 302, а не 200.

Хорошо, хотя благодаря этому результату я могу убедиться, что мод аутентификации работает нормально, это не то, чем я хочу.

ОК, вопрос в том, как мне сделать еще один юнит-тест, чтобы проверить, используется ли мой noteshow.template или нет?

Спасибо за все.

Django версия: 1.1.1

Python версия: 2.6.4

Использование Eclipse для MAC OS

1 Ответ

6 голосов
/ 10 мая 2010

Просто войдите в систему пользователя для каждого теста. Лучший способ сделать это - использовать метод setUp(), который создает клиента, создает пользователя и затем регистрирует пользователя. Также используйте метод tearDown(), который делает обратное (выходит из системы и удаляет пользователя). 1003 *

Методы setUp() и tearDown() запускаются автоматически для каждого теста в наборе тестов.

Это будет выглядеть примерно так:

class Note(TestCase):
    def setUp(self):
        self.client = Client()
        self.new_user = User.objects.create_user('blah', 'blah@blah.com', 'blah')
        self.new_user.save()
        self.client.login(username='blah', password='blah')

    def tearDown(self):
        self.client.logout()
        self.new_user.delete()

    def test_noteshow(self):
        response = self.client.get('/note/')
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, '/note/noteshow.html')

Надеюсь, это поможет.

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