On Mon, Jun 04, 2007 at 03:14:16PM +0200, Florian Lindner wrote:
> Hello,
> in a doctest I have an object which has a view registered.
> I want to call this view and test for the XML it returns.
> How can I call the view so that it is being rendered, just like called by a 
> browser?

Is that in a unit test, or a functional test?

In a unit test you can do it like this:

    >>> context = ...yourcontentobject...
    >>> from zope.publisher.browser import TestRequest
    >>> request = TestRequest()
    >>> view = MyViewClass(context, request)
    >>> print view()
    <some xml or whatever output here>

If you want to provide, e.g., form parameters, pass them to the request:

    >>> request = TestRequest(form={'foo': u'Lalala\u1234'})

If your view does anything interesting (e.g. use TALES expressions, or
refer to other views like context/@@absolute_url), you will need to
register a whole bunch of components in your doctest setUp methods.
Don't forget to tear them down afterwards.  IIRC you will need

    from zope.app.testing import setup

    def setUp(test):

    def tearDown(test):

at the very least.  Accessing other views, resources, or, god forbid,
forms, will require other component registrations.  At some point you
have two choices: figure out this stuff once and then use copy & paste
(actually, helper functions defined once in your project), or switch to
testing your views with functional tests.

Marius Gedminas
Cool. Does it also recode ISO10646-1 pcf files into the funny
permutations and subsets used a long time ago in a galaxy far far away
on the planets Isolatinus XV and Koiruski VIII ...
        -- Markus Kuhn inquires about libXft

Attachment: signature.asc
Description: Digital signature

Zope3-users mailing list

Reply via email to