Christian Theune wrote at 2008-10-15 17:42 +0200:
we stumbled over an annoyance that took a while to debug:
Writing an ITraversable, we used zope.traversing.api.traverse() in a test to verify our code. We registered the ITraversable as an (non-multi) adapter and ended up with a working test.
In the actual system, we found that the traversable would not be used. After investigation we found a conditional branch in the traverse() function which would look for a multi-adapter if a request was around, and a regular adapter if not.
We didn't anticipate this difference and it cost us some time, so we wonder whether this has to be the way it is, or whether this could be changed to behave more obvious and consistent.
The request may have important information to control traversal, e.g. a layer. On the other hand, when no request is available (e.g. in a script), you cannot use one. Thus, the current behaviour may cover useful use cases. Maybe, you should not trust your tests stupidly -- unless they emulate the actual system sufficently ;-) -- Dieter