Как выполнить модульное тестирование расширений Django-CMS? - PullRequest
13 голосов
/ 13 апреля 2010

Я пытаюсь получить тестовое покрытие для реализации Django-CMS, над которой я работаю, и не знаю, как выполнить модульное тестирование плагинов / расширений. Кто-нибудь делал это раньше, и если да, то как? Некоторые примеры были бы потрясающими.

Ответы [ 2 ]

5 голосов
/ 15 ноября 2011

Тесты, показанные cms/tests/plugins.py, скорее интеграционные тесты, чем модульные тесты, и они довольно тяжелые и требуют иногда слишком большой части всей системы в рабочем состоянии (не обязательно неправильно, просто непрактично при отладке).

DjangoCMS тесно интегрирован, поэтому у меня есть несколько способов приблизиться к металлу, а не законченное решение:

Вам нужен поддельный класс в стиле 'Expando':

class Expando(object): # Never use in production!
    def __init__(self, **kw):
        self.__dict__.update(kw)

Чтобы создать экземпляр класса вашего плагина:

from cms.plugin_pool import plugin_pool

# ..in production code: class YourPlugin(CMSPlugin)...

# This ensures that the system is aware of your plugin:
YrPluginCls = plugin_pool.plugins.get('YourPlugin', None)

# ..instantiate:
plugin = YrPluginCls()

Проверка работоспособности плагинов .render Метод:

ctx = plugin.render({}, Expando(attr1='a1', attr2=123), None)

Визуализация с фактическим шаблоном, проверьте вывод:

res = render_to_response(look.render_template, ctx)
# assert that attr1 exist in res if it should
# ..same for attr2

BeautifulSoup удобно при проверке содержимого небольших фрагментов DOM.

Используйте поля формы администратора для косвенной проверки правильности поведения атрибутов модели:

from django.test.client import RequestFactory
from django.contrib.auth.models import AnonymousUser

# ...

request = RequestFactory().get('/')
request.user = AnonymousUser()
a_field = plugin.get_form(request).base_fields['a_field']
a_field.validate('<some valid value>')
# Check that a_field.validate('<some invalid value>') raises
3 голосов
/ 05 августа 2010

Если я правильно понимаю ваш вопрос, вы можете найти примеры модульных тестов для плагинов в модуле cms / tests / plugins.py, расположенном в папке, содержащей вашу установку django-cms.

В основном вы создаете подкласс CMSTestCase и используете класс Client из django.test.client для отправки запросов к вашей CMS и проверки полученных ответов.

Информацию о том, как использовать клиента, можно найти на http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client

...