¿Cómo hacer una prueba unitaria de las extensiones Django-CMS?

Estoy tratando de obtener alguna cobertura de prueba para una implementación de Django-CMS en la que estoy trabajando y no estoy seguro de cómo probar los complementos / extensiones. ¿Alguien ha hecho esto antes, y si es así, cómo? Algunos ejemplos serían impresionantes.
Mejor respuesta
Las pruebas que se muestran en cms / tests / plugins.py son más bien pruebas de integración que pruebas unitarias, y son bastante pesadas y requieren una parte del sistema completo que funciona y está en funcionamiento (no es necesariamente incorrecto, simplemente no es práctico cuando se realiza la depuración).

DjangoCMS está estrechamente integrado, por lo que aquí tengo algunas técnicas para acercarme al 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 instanciar una instancia de su clase de plugin:

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

Verificación de la cordura del método .render de plugins:

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

Renderizar con plantilla real, comprobar salida:

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

BeautifulSoup es útil cuando se valida contenido de pequeños fragmentos de DOM.

Use los campos del formulario de administración para verificar indirectamente que los atributos del modelo se comportan 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

Por favor indique la dirección original:¿Cómo hacer una prueba unitaria de las extensiones Django-CMS? - Código de registro