Я пытаюсь получить некоторое покрытие для реализации Django-CMS, над которым я работаю, и я не уверен, как подключаться к unit test плагинам/расширениям. Кто-нибудь сделал это раньше, и если да, то как? Некоторые примеры были бы замечательными.
Как unit test расширения Django-CMS?
Ответ 1
Тесты, показанные 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)
Render с фактическим шаблоном, проверьте вывод:
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
Ответ 2
Если я правильно понимаю ваш вопрос, вы можете найти примеры для модульных тестов для плагинов в модуле cms/tests/plugins.py, расположенном в папке, содержащей вашу установку django-cms.
В основном вы подклассифицируете CMSTestCase и используете класс Client из django.test.client, чтобы делать запросы к вашей CMS и проверять полученные ответы.
Информация о том, как использовать клиента, можно найти на http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client