2011-04-11 15 views
5

我是新來測試的,我試圖爲我的Plone產品首次創建一個測試。 我在Plone 3.3上。如何在測試用例中訪問使用特定[plone。]瀏覽器層定義的視圖

基本測試套件工作,我可以執行它沒有錯誤。 我遵循這個文檔:http://plone.org/documentation/kb/testing ...除了我在Python類而不是doctests寫測試。

我的問題是,我似乎無法訪問我的應用程序中定義的視圖(我得到ComponentLookupError)。

這個問題似乎與我的應用程序定義的「browserlayer」有關。 當我從我的configure.zcml中刪除layer =「...」屬性時,測試可以毫無問題地訪問視圖。但是,如果我將它添加回來,它不起作用。 我想這是因爲de browserlayer接口不適用於請求。

,唯一提及這個問題,我發現是在googlesitemap測試:http://dev.plone.org/collective/browser/googlesitemap/googlesitemap.common/trunk/googlesitemap/common/tests?rev=

作者似乎已做好測試自定義ZCML文件,其中層=「...」屬性有已被刪除。 (這會工作,但它似乎很糟糕不必保持爲測試一個單獨的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()) 

所以我認爲我的皮膚和browserlayer註冊是正確的。

有什麼我需要做的,以便browserlayer將被應用於請求?

回答

7

瀏覽器層接口只需「繪製」到請求上directlyProvides。在查看視圖之前,只需在您的測試設置中執行此操作即可:

from zope import interface 
from jambette.site.interfaces import IJambetteLayer 

... 

    directlyProvides(request, IJambetteLayer) 
+0

謝謝!這是完美的。 :) – jphoude 2011-04-12 14:26:27

+1

順便說一句,如果這對任何人都有用,我不得不從我的測試用例中的self.portal.REQUEST獲取請求。 – jphoude 2011-04-12 14:33:59

相關問題