Testing 如何在测试中启用灵巧行为?

Testing 如何在测试中启用灵巧行为?,testing,plone,behavior,dexterity,Testing,Plone,Behavior,Dexterity,我正在为基于灵巧性的内容类型编写行为;它正在工作,但我不知道在测试中启用它的正确方法是什么 我使用的是: def\u启用\u背景\u图像\u行为(自身): fti=queryUtility(IDexterityFTI,name='collective.cover.content') 行为=列表(fti.行为) append(self.name) fti.behavies=元组(行为) 定义\禁用\背景\图像\行为(自我): fti=queryUtility(IDexterityFTI,name=

我正在为基于灵巧性的内容类型编写行为;它正在工作,但我不知道在测试中启用它的正确方法是什么

我使用的是:

def\u启用\u背景\u图像\u行为(自身):
fti=queryUtility(IDexterityFTI,name='collective.cover.content')
行为=列表(fti.行为)
append(self.name)
fti.behavies=元组(行为)
定义\禁用\背景\图像\行为(自我):
fti=queryUtility(IDexterityFTI,name='collective.cover.content')
行为=列表(fti.行为)
删除(self.name)
fti.behavies=元组(行为)
但在某些Plone版本中,该行为似乎没有被禁用或启用(它在Plone 4.2和Plone 4.3中的行为有所不同,因为灵活性从1.x移动到2.x)

测试的完整代码位于:

Plone 4.2中的试验结果如下:


启用和禁用集成测试行为的正确方法应该是什么?

我相信您的做法是正确的,但问题与dx 1.x和2.x之间的缓存修复程序有关。我已通过以下方法成功清除测试设置中的dx缓存:

def testSetUp(self):
    import plone.dexterity.schema
    for name in dir(plone.dexterity.schema.generated):
        if name.startswith("plone"):
            delattr(plone.dexterity.schema.generated, name)
    plone.dexterity.schema.SCHEMA_CACHE.clear()

感谢Asko为我指明了正确的方向:我最终以以下方式使模式缓存无效:

来自plone.dexterity.schema导入schemaInvalidateEvent
从zope.event导入通知
#使架构缓存无效
通知(SchemaInValidateEvent('collective.cover.content'))