我正在为基于敏捷的内容类型编写一个行为;它工作正常,但我不知道在测试中启用它的正确方法是什么。
我使用以下内容:
def _enable_background_image_behavior(self):
fti = queryUtility(IDexterityFTI, name='collective.cover.content')
behaviors = list(fti.behaviors)
behaviors.append(self.name)
fti.behaviors = tuple(behaviors)
def _disable_background_image_behavior(self):
fti = queryUtility(IDexterityFTI, name='collective.cover.content')
behaviors = list(fti.behaviors)
behaviors.remove(self.name)
fti.behaviors = tuple(behaviors)
但在某些Plone版本中似乎没有禁用或启用该行为(它在Plone 4.2和Plone 4.3中表现不同,可能是因为Dexterity从1.x移动到2.x)。
Plone 4.2中的测试结果:https://travis-ci.org/collective/collective.cover/jobs/33327495
在集成测试中启用和禁用行为的正确方法是什么?
答案 0 :(得分:2)
谢谢,Asko,指出我正确的方向:我最终以下列方式使架构缓存失效:
from plone.dexterity.schema import SchemaInvalidatedEvent
from zope.event import notify
# invalidate schema cache
notify(SchemaInvalidatedEvent('collective.cover.content'))
答案 1 :(得分:1)
我相信您正确地执行了此操作,但问题与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()