2011-04-11 4 views
5

테스트를 처음 받았고 처음으로 Plone 제품에 대한 테스트를 만들려고합니다. 나는 Plone 3.3에 있습니다.테스트 케이스에서 특정 [plone.] 브라우저 레이어로 정의 된보기에 액세스하는 방법

기본 테스트 스위트가 작동하므로 오류없이 실행할 수 있습니다. 나는이 문서를 따랐다 : http://plone.org/documentation/kb/testing ... doctests 대신 Python 클래스로 테스트를 작성한다는 점만 제외하면.

제 문제는 제 앱에서 정의한보기에 액세스 할 수 없다는 것입니다 (ComponentLookupError가 발생합니다).

문제는 내 응용 프로그램에서 정의한 "browserlayer"가있는 것 같습니다. configure.zcml에서 layer = "..."속성을 제거하면 테스트가 문제없이 뷰에 액세스 할 수 있습니다. 그러나 다시 추가하면 작동하지 않습니다. 브라우저 플레이어 인터페이스가 요청에 적용되지 않기 때문입니다.

내가 찾은이 문제에 대한 유일한 참조 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가 요청에 적용될 수 있도록해야 할 일이 있습니까?

답변

7

브라우저 레이어 인터페이스는 요청에 단순히 'directlyProvides'으로 칠해집니다. 보기를보기 전에 테스트 설정에서 간단히 그렇게하십시오.

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

... 

    directlyProvides(request, IJambetteLayer) 
+0

고맙습니다! 그건 완벽하게 작동합니다. :) – jphoude

+1

그건 그렇고, 누구에게나 유용 할 경우, 나는 내 테스트 케이스에서 self.portal.REQUEST로부터 요청을 받아야했다. – jphoude

관련 문제