2012-11-11 20 views
5

मैंने पास्टर के माध्यम से कुछ ब्राउज़र दृश्य जोड़े हैं, अब मैं उन्हें plone.app.testing से चलाने की कोशिश कर रहा हूं, क्योंकि मुझे दोहराने योग्य और लगातार परीक्षण पसंद हैं। किसी भी समस्या के बिना ब्राउज़र से मैन्युअल रूप से दृश्य को कॉल करना।plone.app.testing ब्राउज़र दृश्य को कॉल नहीं कर सकता

मैंने मैन्युअल रूप से दृश्यों को आयात और प्रारंभ करने दोनों की कोशिश की है, साथ ही वर्ग को प्रतिबंधित ट्रैवर्स से कॉल करने की कोशिश की है। दोनों ही मामलों में एक वस्तु ठीक से प्रारंभ हो जाता है लेकिन जब मैं प्रतिपादन या तो एक समारोह के रूप में उदाहरण के कॉल करने या __call का उपयोग कर को गति प्रदान करने के लिए प्रयास __() विधि, मैं निम्नलिखित त्रुटि मिलती है:

*** KeyError: 'global_cache_settings 

मैं README में उदाहरण को देखा plone.app.testing में .rsting यह समस्या का जिक्र नहीं प्रतीत होता है, त्वरित googling या तो कोई परिणाम नहीं मिला। यह साइट अनुकूलन में से एक हो सकता है, लेकिन जब स्रोत greping, मैंने पाया 'global_cache_settings' Products.CMFPlone में उल्लेख किया है, तो यह शायद एक प्लोन बात है:

eggs/Products.CMFPlone-4.1.4-py2.6.egg/Products/CMFPlone/skins/plone_templates/main_template.pt 
28: <metal:cache use-macro="context/global_cache_settings/macros/cacheheaders"> 
29: Get the global cache headers located in global_cache_settings. 

eggs/plone.app.layout-2.1.13-py2.6.egg/plone/app/layout/presentation/presentation.pt 
11: <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders"> 
12:  Get the global cache headers located in global_cache_settings. 

eggs/plonetheme.sunburst-1.1.6-py2.6.egg/plonetheme/sunburst/skins/sunburst_templates/main_template.pt 
20: <metal:cache use-macro="context/global_cache_settings/macros/cacheheaders"> 
21: Get the global cache headers located in global_cache_settings. 

यहाँ प्रासंगिक वर्ग घोषणाओं:

from zope.interface import implements, Interface 

from Products.Five import BrowserView 
from Products.CMFCore.utils import getToolByName 
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile 
from Products.MyProduct import MyProductMessageFactory as _ 

class IPromoBoardHome(Interface): 
    """ 
    PromoBoardHome view interface 
    """ 
    def __init__(self, context, request): 
     pass 
    def __call__(self): 
     pass 
    def test(): 
     """ test method""" 


class PromoBoardHome(BrowserView): 
    """ 
    PromoBoardHome browser view 
    """ 
    implements(IPromoBoardHome) 

    def __init__(self, context, request): 
     self.context = context 
     self.request = request 
    def __call__(self): 
     return ViewPageTemplateFile('pt/promoboardhome.pt')(self) 
    @property 
    def portal_catalog(self): 
     return getToolByName(self.context, 'portal_catalog') 

    @property 
    def portal(self): 
     return getToolByName(self.context, 'portal_url').getPortalObject() 


    def test(self): 
     """ 
     test method 
     """ 
     dummy = _(u'a dummy string') 

     return {'dummy': dummy} 

टेम्पलेट:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" 
    lang="en" 
    metal:use-macro="here/main_template/macros/master" 
    i18n:domain="Products.MyProduct"> 
<body> 
    <div metal:fill-slot="main"> 
     <tal:main-macro metal:define-macro="main" 
         tal:define="testview view/test"> 

      <span tal:content="testview/dummy">test</span> 

     </tal:main-macro> 
    </div> 
</body> 
</html> 

configure.zcml घोषणा:

<browser:page 
    for="*" 
    name="promoboardhome" 
    class=".promoboardhome.PromoBoardHome" 
    allowed_interface=".promoboardhome.IPromoBoardHome" 
    permission="zope2.View" 
/> 

परीक्षण फ़ाइल:

import unittest2 as unittest 
from . import PROD_INTEGRATION_TESTING 

from plone.app.testing import setRoles, TEST_USER_ID 

from Products.CMFCore.utils import getToolByName 
from Products.MyProduct.browser.promoboardhome import PromoBoardHome 

class TestPromoBoardHome(unittest.TestCase): 
    layer = PROD_INTEGRATION_TESTING 
    def setUp(self): 
     self.portal = self.layer['portal'] 
    def test_call(self): 
     pbh = self.portal.restrictedTraverse('@@promoboardhome') 
     try: 
      pbh() 
     except KeyError: 
      print "that didn't work!" 
      import pdb; pdb.set_trace() 

Am मैं गलत यहाँ कुछ कर रही?

उत्तर

5

ब्राउज़र दृश्य कुछ भी नहीं बल्कि मल्टी एडाप्टर नामित हैं; उनका परीक्षण करने के लिए आपने उन्हें सही संदर्भ पर बुलाया है और दृश्य के लिए घोषित इंटरफ़ेस प्रदान करने के अनुरोध को मैन्युअल रूप से सेट अप किया है;

from zope.interface import alsoProvides 
from Products.MyProduct.browser.promoboardhome import IPromoBoardHome 

class TestPromoBoardHome(unittest.TestCase): 

    layer = PROD_INTEGRATION_TESTING 

    def setUp(self): 
     self.portal = self.layer['portal'] 
     self.request = self.layer['request'] 
     alsoProvides(self.request, IPromoBoardHome) 

मैं ब्राउज़र का एक समूह collective.nitf की तरह पैकेज पर परीक्षण विचार है: आप में मामला शायद कुछ इस तरह है।

हैप्पी परीक्षण!

2

आप शायद बजाय testbrowser साथ विचारों का परीक्षण करना चाहते:

from plone.testing import z2 
browser = z2.Browser(self.layer['app']) 
browser.open(self.layer['portal'].absolute_url() + '/@@promoboardhome') 

या इसी तरह की।

+0

मैं ऐसा कर सकता था, लेकिन मुझे नहीं लगता कि यह एकीकरण परीक्षण और स्वीकृति परीक्षण के अधिक होगा। लेकिन यह समस्या को हल करने के रूप में हल करता है। धन्यवाद। –

+1

@AlexVolkov: यह दोनों के लिए उपयोग योग्य है, और यह प्लोन में आम तौर पर एकीकरण परीक्षण कैसे किया जाता है। –