Plone 使用z3c.form的单元测试处理程序

Plone 使用z3c.form的单元测试处理程序,plone,dexterity,z3c.form,Plone,Dexterity,Z3c.form,我只是想写一个单元测试来测试我的Dextrity SchemaForm中使用buttonAndHandler的方法,但是我在z3c.form文档和Dextrity开发者手册中都找不到合适的方法。我相信我在装饰器行为上被绊倒了,但我不知道应该如何以编程方式调用这些方法 form = self.rf.restrictedTraverse('add-file') #mform = getMultiAdapter((self.rf,self.request), name='add-file') 使用r

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

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

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

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

这是一个具有常规z3c.form和灵巧添加表单的示例

>form_view=self.rf.restrictedTraverse('add-file'))
#如果您的表单是Dextrity DefaultAddForm视图。
>>>表单视图
#从实例中获取表单
>>>form_view.form
#你可以得到所有的处理器
>>>form_view.form.handlers
))
#您还可以通过按钮获取处理程序
>>>save_button=form_view.form.buttons.items()[0]
>>>save\u handler=form\u view.form.handlers.getHandler(保存按钮)
#一旦有了处理程序,就可以直接调用它
save_handler.func(表单_view.表单_实例,保存按钮)
这取决于你在做什么,如果你必须设置多一点,使你的测试工作。 你没有向我们提供足够的信息,说明你在处理程序中所做的工作

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

#您还可以测试您的操作,这可能更具可读性:-)
从z3c.form.testing导入TestRequest
从z3c.form导入按钮
>>>request=TestRequest(form={'form.buttons.save':'save'})
>>>actions=button.ButtonActions(表单\视图.表单\实例,请求,无)
>>>actions.update()
>>>actions.execute()
#这将执行保存操作。

这正是我想要的,但您链接到的z3c.form文档实际上可能更合适。回答得很好,谢谢