- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于一个项目,我有一个复杂的主对象,其中包含许多子组件。这些对象的设置由构造函数接口(interface)控制,我将其绑定(bind)到各种生命周期和工作流事件,如下所示:
@grok.subscribe(schema.ICustomFolder, lifecycleevent.IObjectAddedEvent)
def setup_custom_folder(folder, event):
interfaces.IConstructor(folder).setup()
@grok.subscribe(schema.ICustomFolder, lifecycleevent.IObjectModifiedEvent)
def setup_custom_folder(folder, event):
interfaces.IConstructor(folder).update()
我希望能够做的是测试 Constructor 方法而不依赖于事件处理程序。我尝试通过直接创建对象来避免生命周期事件来做到这一点:
def test_custom_item_constructor(self):
master = createContent('model.master_object',
needed_attribute = 2
)
folder = createContent('model.custom_folder',
__parent__ = master
)
self.assertEqual(0, len(folder))
constructor = interfaces.IConstructor(folder)
constructor.setup()
self.assertEqual(2, len(folder))
setup
方法根据主对象上提供的属性在 Custom_Folder
实例中创建多个项目。然而,这是挂起的,我认为这是由于两个对象实际上都不属于该站点,所以没有获得权限。我可以通过将主对象上的 createContent
更改为 createContentInContainer
并将其添加到测试站点的适当部分来实现这一点,但这会触发所有 生命周期事件,最终执行构造函数调用,这不允许我单独测试它们。
我已经尝试为此使用模拟对象,但是在处理本应在构造函数 .setup
期间发生的内容创建时变得很困惑。
解决这个问题的最佳方法是什么?
最佳答案
我不确定这是否是最好的方法,但我设法通过首先禁用相关事件处理程序,然后在站点内正确创建内容来获得我想要的结果:
def test_custom_item_constructor(self):
zope.component.getGlobalSiteManager().unregisterHandler(
adapters.master.constructor.setup_masterobject,
required=[schema.IMasterObject, lifecycleevent.IObjectAddedEvent]
)
zope.component.getGlobalSiteManager().unregisterHandler(
adapters.custom.constructor.setup_customfolder,
required=[schema.ICustomFolder, lifecycleevent.IObjectAddedEvent]
)
master = createContentInContainer(self.portal, 'model.master_object',
needed_attribute = 2
)
folder = createContentInContainer(master, 'model.custom_folder',
__parent__ = master
)
self.assertEqual(0, len(folder))
constructor = interfaces.IConstructor(folder)
constructor.setup()
self.assertEqual(2, len(folder))
这足以解除由添加新主对象触发的事件链。
关于单独测试 Dexterity 内容创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11876996/
对于一个项目,我有一个复杂的主对象,其中包含许多子组件。这些对象的设置由构造函数接口(interface)控制,我将其绑定(bind)到各种生命周期和工作流事件,如下所示: @grok.subscri
我正在关注这里的测试:https://github.com/plone/plone.app.referenceablebehavior/blob/master/plone/app/referencea
我正在使用灵活性来构建内容类型。我们有出生日期字段,默认年份范围是从当年起 +- 10 年。 日期字段需要修改,年份应该从 1950 年开始。我仔细看了看,找不到我想要的正确信息。 下面是我的 DOB
我是 Stack Overflow 的新手,我刚刚开始开发一个内部网站来记录我们正在进行的用户研究的结果。 我正在使用 Plone 4.1 并且刚刚开始学习使用 Dexterity 框架作为页面来显示
我创建了一种非文件夹式的内容类型并允许讨论。显示了添加评论的表单,但是当发表评论时我得到了下一个错误: 2013-03-09 22:24:32 ERROR root Exception while r
我使用的内容类型使用 IBasic 行为(标题 + 描述)。我想在添加和编辑表单时隐藏描述字段。 我熟悉如何处理原型(prototype),但在试错结束后找不到处理敏捷的好方法 - 我认为 IBasi
在 Archetypes 中,为了将一个字段从一个字段集(或模式)移动到另一个,我们可以执行以下操作: schema['creators'].schemata = 'default' 但是,我使用 D
我需要添加一个条件,以避免在添加我的内容类型的对象时加载一些 javascript 代码;以下条件仅在编辑对象时有效: 此 javascript 代码负责创建选项卡界面,但我想在我的用例中绕
我的 Dexterity 内容类型中有 datagridfield,使用 Collective.z3cform。我有一个接口(interface)类,它将我的内容类型中主数据网格字段的 value_t
如何创建混合类型(即保持模型驱动类型的便利性但根据需要利用模式驱动类型的类型)? 我最近的探索使我将模型驱动的敏捷类型作为最方便的敏捷开发方法。我一直在关注这篇文章:http://developer.
在创建时使用 INameChooser 选择对象 ID 很简单。但我们也希望能够在 Plone 后选择对象 ID(并避免在对象 ID 中使用 copy_of)。 我们尝试了几种不同的解决方案: 事件订
我正在尝试将文件夹默认 View 设置为我创建的 Dexterity 内容类型。但我看到 Dexterity 内容类型不在文件夹的可能默认内容 View 列表中。为什么?我必须在内容类型中设置一个选项
我有一个具有多种敏捷类型的自定义产品,setuphandler 使用其中的几种来创建站点结构。这在测试之外没有任何问题,但在测试中它总是失败: Traceback (most recent call
我认为可以创建一个调用默认工厂的自定义 Dexterity 工厂,然后将一些子内容(在我的例子中是基于原型(prototype)的)添加到创建的“父”Dexterity 内容。 我在创建和注册自定义工
我已经实现了 Dexter在我的应用程序中。它适用于 CAMERA、EXTERNAL STORAGE 和 INTERNAL STORAGE 权限。我想用 Dexter 的 PHONE_CALL 权限打
我有一个运行 Plone 4.1 的站点,它具有使用 Dexterity 1.1 开发的自定义内容类型。我的内容作者可以使用“分类”选项卡将关键字添加到基本的 Plone 页面,如果用户使用其中一个关
我正在尝试将新闻项目中的内容复制到我编写的其他内容类型。在我的脚本中,我有 news项目和 project元素。第二个,project , 是使用 Dexterity 定义的内容类型。如果我能从 ne
我一直在研究基于灵巧的 Plone 应用程序。 我创建了几个新类型。这是我为激活对名为“activity_report”的特定敏捷内容类型的评论所做的: 在 Plone 控制面板 在讨论部分,我启用了
我希望为基于 Dexterity 的自定义内容类型的属性(“扇区”)启用一个名为“扇区”的特殊索引。 在我的架构中,在 types/mycontent.py 中,我有: class IMyConten
感谢您检查。所以我一直在做一个项目,该项目最终将扩展/添加一些功能,目前我正在努力向 Dexter (https://github.com/Karumi/Dexter) 请求权限。我已经能够让它工作,
我是一名优秀的程序员,十分优秀!