tutorial plugin cmspluginbase cms django plugins django-cms

cmspluginbase - django cms plugin tutorial



¿Cómo probar las extensiones de Django-CMS? (2)

Si entiendo su pregunta correctamente, puede encontrar ejemplos de pruebas unitarias para complementos en el módulo cms / tests / plugins.py, ubicado en la carpeta que contiene la instalación de django-cms.

Básicamente, usted subclase CMSTestCase y utiliza la clase Client de django.test.client para realizar solicitudes a su CMS y comprobar las respuestas resultantes.

Se puede encontrar información sobre cómo usar el cliente en http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client

Estoy tratando de obtener una cobertura de prueba para una implementación de Django-CMS en la que estoy trabajando y no estoy seguro de cómo probar plugins / extensiones de la unidad. Alguien ha hecho esto antes, y si es así, ¿cómo? Algunos ejemplos serían increíbles


Las pruebas mostradas por cms/tests/plugins.py son más bien pruebas de integración que pruebas unitarias, y eso es bastante pesado y requiere una parte a veces demasiado grande del sistema completo en funcionamiento (no necesariamente incorrecto, simplemente no práctico cuando se depura).

DjangoCMS está estrechamente integrado así que lo que tengo aquí son algunas técnicas para estar más cerca del metal en lugar de una solución completa:

Necesitas una clase falsa estilo ''Expando'':

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

Para crear una instancia de su clase de complemento:

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()

Sanidad comprueba los complementos Método .render :

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

Renderizar con plantilla real, verificar salida:

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

BeautifulSoup es útil al validar el contenido de pequeños fragmentos de DOM.

Use campos de formulario de administrador para verificar indirectamente que los atributos del modelo se comporten correctamente:

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