[Zope] Offline testing

John R. Daily jdaily@progeny.com
Wed, 28 Feb 2001 09:49:04 -0500


I'm still having difficulty setting up a REQUEST object properly. I
added the following line so that I would hopefully have URLn values set:

    environ['SERVER_URL'] = 'http://foo/foo'

And now I'm getting the included error, which as far as I can tell
seems to be the result of missing URL information.

The UNITTEST documentation refers to Zope.debug() as a way to get
around these issues, but I don't want to invoke a URL directly; I want
to test the individual functions I've defined in Zope.

Does anyone have any further examples of importing Zope and
HTTPRequest and setting up fake requests? My internet searches are not
pulling up much with "import HTTPRequest".

-John

--

Traceback (innermost last):
  File "<stdin>", line 1, in ?
  File "issues.py", line 61, in runTest
    id.append(libissue.add_issue(self.type))
  File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__
    return self._bindAndExec(args, kw, None)
  File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec
    return self._exec(bound_data, args, kw)
  File "/usr/lib/zope/lib/python/Products/PythonScripts/PythonScript.py", line 330, in _exec
    result = apply(f, args, kw)
  File "Script (Python)", line 24, in add_issue
  File "/usr/lib/zope/lib/python/OFS/PropertyManager.py", line 355, in manage_changeProperties
    return self.manage_propertiesForm(self,REQUEST,manage_tabs_message=message)
  File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324, in __call__
    return self._bindAndExec(args, kw, None)
  File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec
    return self._exec(bound_data, args, kw)
  File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec
    try: result = render_blocks(self._v_blocks, ns)
  File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 337, in __render_with_namespace__
    return self._bindAndExec((), namevals, namespace)
  File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353, in _bindAndExec
    return self._exec(bound_data, args, kw)
  File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec
    try: result = render_blocks(self._v_blocks, ns)
  File "/usr/lib/zope/lib/python/DocumentTemplate/DT_With.py", line 146, in render
    try: return render_blocks(self.section, md)
  File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Var.py", line 271, in render
    val = md[name]
  File "/usr/lib/zope/lib/python/OFS/Application.py", line 255, in PrincipiaTime
    return apply(DateTime, args)
TypeError: function requires at least 1 argument; 0 given

> Hi John...
> 
> This might have to do with the fact that PythonScripts are looking for
> REQUEST.  When you do "import Zope; app=Zope.app()", a REQUEST cannot be
> acquired through objects in the system.  In normal operation, they can be.
> Here's a way around it:
> 
> import ZODB # this is "magical", unfortunately
> import os
> from os import environ
> from sys import stdin
> from ZPublisher.HTTPRequest import HTTPRequest
> from ZPublisher.HTTPResponse import HTTPResponse
> from ZPublisher.BaseRequest import RequestContainer
> 
> def makerequest(app):
>     resp = HTTPResponse()
>     environ['SERVER_NAME']='foo'
>     environ['SERVER_PORT']='80'
>     environ['REQUEST_METHOD'] = 'GET'
>     req = HTTPRequest(stdin, environ, resp)
>     return app.__of__(RequestContainer(REQUEST = req))
> 
> class ATest(TestCase):
>     def setUp(self):
>         import Zope
>         self.app = makerequest(Zope.app())
> 
> self.app will be bound to a Zope instance with a fake request in all your
> test cases now.
> 
> 
> ----- Original Message -----
> From: "John R. Daily" <jdaily@progeny.com>
> To: <zope@zope.org>
> Sent: Monday, February 26, 2001 1:13 PM
> Subject: [Zope] Offline testing
> 
> 
> > I'm attempting to run offline unit tests (via PyUnit, importing the
> > Zope module with Zope turned off) against some functionality I've
> > written via Python Scripts. The error messages are not helping much,
> > and the online tests work fine, so I'm at a loss to troubleshoot this.
> >
> > Any suggestions on how to interpret the following, or pointers to Zope
> > troubleshooting resources that would help, would be greatly appreciated.
> >
> > Essentially, I have a /lib/issue/add_issue Python script which takes a
> > string argument and creates a new folder by that name in a certain
> > path. The add_issue script acts under a proxy to run as a Manager.
> >
> > Run: 4 ; Failures: 0; Errors: 1
> > There was 1 error:
> > 1) issues.issuesTest.runTest
> > Traceback (innermost last):
> >   File "issues.py", line 45, in runTest
> >     id.append(libissue.add_issue(self.type))
> >   File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324,
> in __call__
> >     return self._bindAndExec(args, kw, None)
> >   File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353,
> in _bindAndExec
> >     return self._exec(bound_data, args, kw)
> >   File "/usr/lib/zope/lib/python/Products/PythonScripts/PythonScript.py",
> line 330, in _exec
> >     result = apply(f, args, kw)
> >   File "Script (Python)", line 32, in add_issue
> >   File "/usr/lib/zope/lib/python/OFS/PropertyManager.py", line 355, in
> manage_changeProperties
> >     return
> self.manage_propertiesForm(self,REQUEST,manage_tabs_message=message)
> >   File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 324,
> in __call__
> >     return self._bindAndExec(args, kw, None)
> >   File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353,
> in _bindAndExec
> >     return self._exec(bound_data, args, kw)
> >   File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec
> >     try: result = render_blocks(self._v_blocks, ns)
> >   File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 337,
> in __render_with_namespace__
> >     return self._bindAndExec((), namevals, namespace)
> >   File "/usr/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line 353,
> in _bindAndExec
> >     return self._exec(bound_data, args, kw)
> >   File "/usr/lib/zope/lib/python/App/special_dtml.py", line 236, in _exec
> >     try: result = render_blocks(self._v_blocks, ns)
> >   File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Let.py", line 146, in
> render
> >     else: d[name]=expr(md)
> >   File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Util.py", line 334,
> in eval
> >     return eval(code,globals,d)
> >   File "<string>", line 0, in ?
> >   File "/usr/lib/zope/lib/python/DocumentTemplate/DT_Util.py", line 127,
> in careful_getattr
> >     try: v=getattr(inst, name)
> > AttributeError: 'None' object has no attribute 'get'
> >
> > --                                                                   --
> > John R. Daily                                        jdaily@progeny.com
> > Systems Programmer                                Progeny Linux Systems
> >   Master of the ephemeral epiphany
> >
> > _______________________________________________
> > Zope maillist  -  Zope@zope.org
> > http://lists.zope.org/mailman/listinfo/zope
> > **   No cross posts or HTML encoding!  **
> > (Related lists -
> >  http://lists.zope.org/mailman/listinfo/zope-announce
> >  http://lists.zope.org/mailman/listinfo/zope-dev )
> >
>