我正在为Plone和内部测试覆盖开发一个PAS插件我也在测试生成的HTML(我没有使用zope.testbrowser或类似的,我需要测试的东西非常简单)。 问题是,当测试运行时,调用堆栈与浏览器使用完全不同(在一个真正的Plone站点上,我复制了测试环境)。
这是一段失败的测试:
portal = self.layer['portal']
request = self.layer['request']
request.set('ACTUAL_URL', 'http://nohost/plone/folder/subfolder')
request.set('URL', 'http://nohost/plone/folder/subfolder')
login(portal, 'user2')
output = self.folder.subfolder()
那里子文件夹是一个ATCT文件夹,我正在调用它的默认视图(文件夹列表)。
现在,PAS插件正在实施checkLocalRolesAllowed
方法。
def checkLocalRolesAllowed(self, user, object, object_roles):
...
发生了什么:
checkLocalRolesAllowed
已完成object
=< ATFolder at subfolder>,user
='users2'checkLocalRolesAllowed
是在门户网站root上完成的:object
=< PloneSite at plone>,user
='用户2' 在这两种情况下,该方法被称为大量额外时间(这是正常的),但是呼叫顺序完全不同。
在测试中,子文件夹上下文只是堆栈顺序中的4rth(前两次是Plone站点,ZCatalog是第三次)。
从“好”行为是浏览器再现的行为开始,如何在测试中模拟相同的行为?为什么在第一次通话时调用portal.folder.subfolder()
正在使用Plone网站?
NB :我测试了其他组合,例如使用restrictedTraverse
,portal.folder.subfolder.folder_listing()
,......没有用。