[Zope3-Users] Tests are not working Was: Access to request in content object and object path in doctests

Maciej Wisniowski maciej.wisniowski at coig.katowice.pl
Mon Jan 29 02:53:24 EST 2007


Marius, thanks for your answers, it was helpful :)

Although I still have some silly problems with tests...

I've created simplest possible structure with
view, content class and interface and a bit of
zcml to register view as index.html. This works
in Zope because after creating content object
I'm able to go to index.html and see what I expected.

I'm trying to create doctests and I'm not able to get
my view with getMultiAdapter. I can't find why...
Do I have to explicitly call XMLConfig or something
like that? What is wrong?


basic/basic.py:
------------------------
from persistent import Persistent
from zope import schema
from zope.interface import implements, Interface
import zope.publisher.browser
 
class IMyInterface(Interface):
    ''' interface
    '''
  
class MyContent(Persistent):  #MyBaseContent):
    ''' content
    '''
    implements(IMyInterface)

class MyView(zope.publisher.browser.BrowserPage):
    ''' view
    '''
    def __call__(self):
        return 'dddd'


basic/configure.zcml
-------------------------
<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:zcml="http://namespaces.zope.org/zcml"
    xmlns:browser="http://namespaces.zope.org/browser"> 
 
  <browser:page
      name="index.html"
      for=".basic.IMyInterface"
      class=".basic.MyView"
      permission="zope.Public"
  />

  <browser:addMenuItem
      title="MyContent"
      class=".basic.MyContent"
      permission="zope.ManageContent"
      /> 
</configure>


basic/tests/test_basic.py
------------------------------------------
import unittest
from zope.app.testing import setup

def setUp(test):
    setup.placelessSetUp()
    setup.setUpTraversal()
   
def tearDown(test):
    setup.placelessTearDown()
       
def test_basic():
    """\

  >>> from basic.basic import MyContent
  >>> from zope.publisher.browser import TestRequest
  >>> from zope import component
  >>> from zope.interface import Interface
 
  >>> test_content = MyContent()
  >>> request = TestRequest(form={'tfl.row_id':1})
  >>> rview = component.getMultiAdapter(
  ...         (test_content, request), Interface, 'index.html')
  >>> rview()
  'a'  
"""
   
def test_suite():
    from zope.testing import doctest
    suite = unittest.TestSuite()
    suite.addTest(doctest.DocTestSuite(
                  setUp=setUp, tearDown=tearDown,
                 ))
    return suite

if __name__=='__main__':
    unittest.main(defaultTest='test_suite')



Another question is how to get
request.principal? I did:
  >>> request = TestRequest(form={'tfl.row_id':1})
  >>> class User(object):
  ...     id = 'Jan'
  >>> request.setPrincipal(User())

but is this correct way? Shouldn't this be done by testing
framework already?

---
Maciej Wisniowski


More information about the Zope3-users mailing list