1

我正在为 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是在门户根目录上完成的:object= <PloneSite at plone>, user='user2'

在这两种情况下,该方法都被调用了很多额外的时间(这是正常的),但调用顺序完全不同。

测试中,子文件夹上下文仅在堆栈顺序中排在第 4 位(前两次是 Plone 站点,第三次是 ZCatalog)。

从“好”行为是浏览器再现的事实出发,如何在测试中模拟相同的行为?为什么portal.folder.subfolder()在第一次通话时使用 Plone 站点?

注意:我测试了其他组合,例如使用restrictedTraverse, portal.folder.subfolder.folder_listing(), ... 没有任何效果。

4

0 回答 0