我是测试新手,我第一次尝试为我的 Plone 产品创建测试。 我在使用 Plone 3.3。
基本测试套件有效,我可以毫无错误地执行它。 我遵循了这个文档:http://plone.org/documentation/kb/testing ...除了我在 Python 类而不是 doctests 中编写测试。
我的问题是我似乎无法访问我的应用程序中定义的 View (我收到 ComponentLookupError)。
问题似乎出在我的应用程序定义的“浏览器层”上。 当我从 configure.zcml 中删除 layer="..."属性时,测试可以毫无问题地访问 View 。但是,如果我把它加回去,它就不起作用了。 我想那是因为 de browserlayer 接口(interface)没有应用到请求。
我发现这个问题的唯一引用是在 googlesitemap 的测试中:http://dev.plone.org/collective/browser/googlesitemap/googlesitemap.common/trunk/googlesitemap/common/tests?rev=
作者似乎为测试做了一个自定义的 ZCML 文件,其中 layer="..."属性已被删除。 (这会起作用,但必须为测试维护一个单独的 zcml 文件似乎很糟糕)
在我的测试中,我包含了以下内容(取自 googlesitemap 测试),它们通过了:
from jambette.site.interfaces import IJambetteLayer # this is my browserlayer
from plone.browserlayer.utils import registered_layers
self.assertTrue(IJambetteLayer in registered_layers())
所以我认为我的皮肤和浏览器层注册正确。
我需要做些什么才能将浏览器层应用于请求吗?
最佳答案
浏览器层接口(interface)使用directlyProvides
简单地“绘制”到请求上。在查看 View 之前,只需在测试设置中这样做:
from zope import interface
from jambette.site.interfaces import IJambetteLayer
...
directlyProvides(request, IJambetteLayer)
关于testing - 如何访问在测试用例中使用特定 [plone.]browserlayer 定义的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5628089/