django - 如何对 Django-CMS 扩展进行单元测试?

标签 django plugins django-cms

我正在尝试为我正在处理的 Django-CMS 实现获得一些测试覆盖率,但我不确定如何对插件/扩展进行单元测试。以前有没有人这样做过,如果是这样,怎么做?一些例子会很棒。

最佳答案

测试如 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

关于django - 如何对 Django-CMS 扩展进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625008/

相关文章:

python - Django 模板 : Use translation in default_if_none

django - Wagtail Streamblock 模板渲染

安卓与 Django : How to keep user logged in

jquery - 在命名空间 jQuery 插件中跨方法共享设置

django - 基于请求命名空间解析 URL

django - 如何将 HTML 输入到 Django 表单字段的帮助文本中?

java - 以编程方式从 Eclipse 的“项目属性”对话框中选择一个节点

python - 是否可以在渲染函数中返回 HttpResponse 对象?

python - Django 内容管理系统 : Update from aldryn-blog to aldryn-newsblog

python - 如何在 VIM 中指定 Python 解释器版本?