I made a change in TG2.3.5 which will make easier to perform tests on things outside controllers and wrote a short documentation on writing tests with TurboGears: http://turbogears.readthedocs.org/en/development/turbogears/testing.html
This should greatly help people with most common issues with testing TurboGears apps :) On Wed, Jan 7, 2015 at 7:12 PM, Alessandro Molina < [email protected]> wrote: > This is something I have been thinking of for a bunch of weeks. > > The two options are: > > 1) Make possible to pass a base_url optional argument to tg.url which is > used instead of the request for URL generation. This is a specific solution > but less invasive. > 2) Make a reusable method that initializes a fake TurboGears Context so > that all request related features can work even outside a request. This is > the most flexible solution but might actually create huge bugs and issues > when misused. > > In the mean time you can probably achieve the same result by doing the > same that ``tgshell`` command does, just create a TurboGears webapp (you > should have it already in your test suite) and call > ``test_app.get('/_test_vars')`` this will create a context that is > permanently available for the whole process lifetime and so you can then > call any context based function. > > > > On Tue, Dec 23, 2014 at 11:57 AM, lebouquetin <[email protected]> > wrote: > >> Hi all, >> >> I have developed a serialization class which is based on tg.url(). When >> trying to unit-test it using nose, I get the following error: >> >> ====================================================================== >> ERROR: >> tracim.tests.library.test_serializers.TestSerializers.test_serialize_Content_comment_THREAD >> ---------------------------------------------------------------------- >> Traceback (most recent call last): >> File >> "/home/damien/proj/tracim-app/pod/tg2env/lib/python3.2/site-packages/nose/case.py", >> line 198, in runTest >> self.test(*self.arg) >> File >> "/home/damien/proj/tracim-app/pod/tracim/tracim/tests/library/test_serializers.py", >> line 117, in test_serialize_Content_comment_THREAD >> res = Context(CTX.THREAD).toDict(obj) >> File >> "/home/damien/proj/tracim-app/pod/tracim/tracim/model/serializers.py", line >> 191, in toDict >> result = self.toDictSpecific(serializableObject) >> File >> "/home/damien/proj/tracim-app/pod/tracim/tracim/model/serializers.py", line >> 205, in toDictSpecific >> result = converter_function(serializableObject, self) # process the >> object with the given serializer >> File >> "/home/damien/proj/tracim-app/pod/tracim/tracim/model/serializers.py", line >> 409, in serialize_node_for_page >> 'delete': >> context.url('/workspaces/{wid}/folders/{fid}/{ctype}/{cid}/comments/{commentid}/put_delete'.format(wid >> = item.workspace_id, fid=item.parent.parent_id, ctype=item.parent.type+'s', >> cid=item.parent.content_id, commentid=item.content_id)) >> File >> "/home/damien/proj/tracim-app/pod/tracim/tracim/model/serializers.py", line >> 142, in url >> url = tg.url(base_url, params) >> File >> "/home/damien/proj/tracim-app/pod/tg2env/lib/python3.2/site-packages/TurboGears2-2.3.4-py3.2.egg/tg/controllers/util.py", >> line 84, in url >> req = tg.request._current_obj() >> File >> "/home/damien/proj/tracim-app/pod/tg2env/lib/python3.2/site-packages/TurboGears2-2.3.4-py3.2.egg/tg/request_local.py", >> line 171, in _current_obj >> return getattr(context, self.name) >> File >> "/home/damien/proj/tracim-app/pod/tg2env/lib/python3.2/site-packages/TurboGears2-2.3.4-py3.2.egg/tg/support/objectproxy.py", >> line 19, in __getattr__ >> return getattr(self._current_obj(), attr) >> File >> "/home/damien/proj/tracim-app/pod/tg2env/lib/python3.2/site-packages/TurboGears2-2.3.4-py3.2.egg/tg/support/registry.py", >> line 69, in _current_obj >> 'thread' % self.____name__) >> *nose.proxy.TypeError: No object (name: context) has been registered for >> this thread* >> >> Question is : how to use tg.url() in unit-tests (without to go through >> http-like class). >> Should I call load_app() ? >> >> Thank's >> >> >> Damien >> >> -- >> You received this message because you are subscribed to the Google Groups >> "TurboGears" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/turbogears. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "TurboGears" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/turbogears. For more options, visit https://groups.google.com/d/optout.

