首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用buttonAndHandler对z3c.form进行单元测试

用buttonAndHandler对z3c.form进行单元测试
EN

Stack Overflow用户
提问于 2014-10-27 19:20:54
回答 1查看 79关注 0票数 2

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

代码语言:javascript
代码运行次数:0
运行
复制
form = self.rf.restrictedTraverse('add-file')
#mform = getMultiAdapter((self.rf,self.request), name='add-file')

使用restrictedTraverse或getMultiAdapter生成相同的对象。所以,如果我想调用form.addFileSendToEditors,我将表单作为第一个变量传递,"action“是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 07:58:32

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

这是一个使用常规z3c.form和灵巧添加形式的示例。

代码语言:javascript
代码运行次数:0
运行
复制
>>> 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文档:我没有亲自运行这段代码。

代码语言:javascript
代码运行次数:0
运行
复制
# 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. 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26595231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档