You are not logged in Log in Join
You are here: Home » Members » Stefan's Home » ZopeTestCaseWiki » FrequentlyAskedQuestions

Log in
Name

Password

 
 

History for FrequentlyAskedQuestions

??changed:
-
<hr>

Why is &lt;your favourite REQUEST variable here&gt; missing from the REQUEST?

   ZTC only has a very minimal REQUEST. If you need anything fancy in the
   REQUEST (like SESSION, PARENTS, URL1, ...) you will have to put it
   there yourself, typically in afterSetUp. See e.g. testShoppingCart.py.

<hr>

How do I enable the Zope event log?

   To enable the event log you have to set the required environment
   variables before importing '!ZopeTestCase'. Your 'test*.py' file should
   begin with something like::

    os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
    os.environ['EVENT_LOG_SEVERITY'] = '-300'

    from Testing import ZopeTestCase

<hr>

How do I test an existing ZODB?

   Create a 'custom_zodb.py' file in your 'tests' directory that looks
   like the following::

     import os
     from ZODB.DemoStorage import DemoStorage
     from ZODB.FileStorage import FileStorage
     db = os.path.join('..', '..', '..', 'var', 'Data.fs')
     db = os.path.abspath(db)
     Storage = DemoStorage(base=FileStorage(db, read_only=1))

   This way your test !DemoStorage will be based on the existing !FileStorage. You may safely play
   around in the !DemoStorage without having to fear corruption of the base db. 

<hr>

How do I attach to a running ZEO server?

  1. Setup a ZEO server and start it.

  2. Setup a Zope instance as ZEO client. The instance directory must contain a 'custom_zodb.py' file.

  3. Set the 'ZEO_INSTANCE_HOME' environment variable to point to the instance directory.

  4. Run the tests by typing 'python testBlahBlah.py' or 'python runalltests.py'.

  !ZopeTestCase will then use the instance's 'custom_zodb.py' to connect to the ZEO server instead
  of setting up the test !DemoStorage. 

  Alternatively, you can add the 'custom_zodb.py' file to the 'tests' directory along the lines of the 
  previous example, and skip steps 2 and 3. 

  Background information is available here: ZopeEnvironment

<hr>

Why does cut/copy/paste/clone/rename give !CopyErrors?

   Should you have problems with these operations make sure a '_p_jar' is set up by 
   performing a subtransaction commit::

     get_transaction().commit(1)

   I found this documented in the sources of 'OFS/CopySupport.py', see method '_getCopy()'.

<blockquote>
Simon Michael reports this hint did not work for him, and he had to resort to a hack and set
'ZwikiPage.cb_isMoveable = lambda x:1'. I plan to look into this.
</blockquote>

<hr>

Why does import/export give !AttributeErrors?

   You may see '"None object has no attribute ..."' errors when trying to import or export a Zope object.
   Should you see such errors make sure a '_p_jar' is set up by performing a subtransaction commit 
   like above.

<hr>

Is it allowed to explicitly commit a transaction in a test? 
    
   While it is allowed to commit a **subtransaction** as hinted above, committing a full (complete?) 
   transaction is generally **not recommended**. Transactions are supposed to be handled   
   transparently by !ZopeTestCase, and you have to be careful to cleanup your own mess once you call 
   'get_transaction().commit()' inside of 'afterSetUp' or a test method. The 'testWebserver.py' example 
   shows how one might go about committing manually, but you will rarely want to do so - honest.

<hr>