如何使用plone.app.testing和PAS插件模拟浏览器访问

时间:2015-05-08 13:17:11

标签: unit-testing authorization plone plone-4.x

我正在为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 :我测试了其他组合,例如使用restrictedTraverseportal.folder.subfolder.folder_listing(),......没有用。

0 个答案:

没有答案