plone - 使用 z3c.form 进行单元测试 buttonAndHandler

标签 plone dexterity z3c.form

我只是想编写一个单元测试来测试我的 dexterity SchemaForm 中使用 buttonAndHandler 的方法,但我无法在 z3c.form 文档和 Dexterity 开发人员手册中找到任何合适的内容。我相信我被装饰器行为绊倒了,但我不知道应该如何以编程方式调用这些方法。

form = self.rf.restrictedTraverse('add-file')
#mform = getMultiAdapter((self.rf,self.request), name='add-file')

使用restrictedTraverse或getMultiAdapter会产生相同的对象。因此,如果我想调用 form.addFileSendToEditors,我将表单作为第一个变量传递,那么“action”又是什么?

最佳答案

基本上,您可以从表单获取处理程序并手动调用。

这是一个包含常规 z3c.form 和 Dexterity add 表单的示例。

>>> form_view = self.rf.restrictedTraverse('add-file')

# If your form is a Dexterity DefaultAddForm view.
>>> form_view
<plone.dexterity.browser.add.DefaultAddView object at 0x10cbf0950>
# Get the form from the instance
>>> form_view.form
<class 'plone.dexterity.browser.add.DefaultAddForm'>


# Than you can get all handlers
>>> form_view.form.handlers
<Handlers [<Handler for <Button 'save' u'Save'>>, <Handler for <Button 'cancel' u'Cancel'>>]
# and all buttons
form_view.form.buttons.items()
[('save', <Button 'save' u'Save'>), ('cancel', <Button 'cancel' u'Cancel'>)]

# In _handlers you can see the buttons, with the corresponding handlers
form_view.form.handlers._handlers
((<Button 'save' u'Save'>, <Handler for <Button 'save' u'Save'>>), (<Button 'cancel' u'Cancel'>, Handler for <Button 'cancel' u'Cancel'>>))

# You can also get the handler by button
>>> save_button = form_view.form.buttons.items()[0]
>>> save_handler = form_view.form.handlers.getHandler(save_button)
<Handler for <Button 'save' u'Save'>>

# Once you have your handler, you can call it directly
save_handler.func(form_view.form_instance, save_button)

如果您需要进行更多设置才能使测试正常工作,这取决于您正在做什么。 您没有向我们提供有关您在处理程序中所做的事情的足够信息。

这取自 z3c.form 文档: 我没有为自己运行这段代码。

# You can test your actions also this, probably more readable :-)
from z3c.form.testing import TestRequest
from z3c.form import button

>>> request = TestRequest(form={'form.buttons.save': 'Save'})
>>> actions = button.ButtonActions(form_view.form_instance, request, None)
>>> actions.update()
>>> actions.execute()
# This executes your Save actions. 

关于plone - 使用 z3c.form 进行单元测试 buttonAndHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26595231/

相关文章:

python - 如何为特定的 HTTP 方法类型注册 Plone View

macos - 无法在 MacOS High Sierra (10.13.3) 上安装 Plone 5.0.8

python - 如何在 Dexterity 中传递数据网格字段中选择字段的列表值?

python - 链接 z3c 表单

使用 plone.namedfield.field.NamedImage 的 Plone portlet

python - 如何将 onfocus 添加到 z3c.form 输入

windows - 在 windows ssh 中连接到远程 zope 控制台

popup - 使用 Diazo 主题取消所有弹出窗口的样式

plone - 我可以在 Dexterity 中创建表格数据字段吗?

jquery-ui - Plone Dexterity RelationChoice 小部件与 jQueryUI 冲突?