Sunday, 15 June 2014

unit testing - django test client fails, but url works -



unit testing - django test client fails, but url works -

i'm having unusual problem unit tests, quite simple, failing. unusual thing work runserver, i.e, can render perfil_usuario view, in unit tests failing noreversematch.

first of all, main urlconf:

from django.conf.urls import patterns, include, url django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r"^$", include("traxx.hotsite.urls", namespace="hotsite")), url(r'^admin/', include(admin.site.urls)), url(r'^imperavi/', include('imperavi.urls')), url(r"^app/", include("traxx.sistema.urls", namespace="app")), url(r"^usuarios/", include("traxx.usuarios.urls", namespace="usuarios")), url(r"^notificacoes/", include("traxx.notificacoes.urls", namespace="notificacoes")), url(r"^clientes/", include("traxx.clientes.urls", namespace="clientes")), )

my usuarios (4th url conf in main) urlconf following:

# coding: utf-8 django.conf.urls import patterns, include, url urlpatterns = patterns("traxx.usuarios.views", url(r"^perfil/(?p<id>\d+)/$", "perfil_usuario", name="perfil"), url(r"^configuracoes/(?p<id>\d+)/$", "configuracoes_usuario", name="configuracoes"), url(r"^login/$", "login", name="login"), url(r"^logout/$", "logout", name="logout"), )

this view:

def perfil_usuario(request, id): usuario = get_object_or_404(usuario, pk=id) homecoming render(request, "usuarios/perfil_usuario.html", {"usuario": usuario})

and failing unit test:

class perfilusuarioviewtestcase(transactiontestcase): """testes para view home""" def setup(self): pass def test_get_perfil_usuario(self): usuario_fake = mommy.make(usuario, nome_usuario="teste") c = client() resposta = c.get(reverse("usuarios:perfil", kwargs={"id": usuario_fake.pk})) self.assertequal(200, resposta.status_code)

the reverse phone call reverse("usuarios:perfil", kwargs={"id": usuario_fake.pk}) works fine, outputing /usuarios/perfil/1/.

call reverse >>> django.core.urlresolvers import reverse >>> reverse("usuarios:perfil", kwargs={"id":1}) /home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/imperavi/views.py:1: deprecationwarning: md5 module deprecated; utilize hashlib instead import md5 '/usuarios/perfil/1/'

i'm using django 1.6.

full traceback traceback (most recent phone call last): file "/home/george/projetos/traxx/src/traxx/testes/usuarios/views.py", line 21, in test_get_perfil_usuario resposta = c.get(reverse("usuarios:perfil", kwargs={"id": usuario_fake.pk})) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/test/client.py", line 473, in response = super(client, self).get(path, data=data, **extra) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/test/client.py", line 280, in homecoming self.request(**r) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/test/client.py", line 444, in request six.reraise(*exc_info) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) file "/home/george/projetos/traxx/src/traxx/usuarios/views.py", line 12, in perfil_usuario homecoming render(request, "usuarios/perfil_usuario.html", {"usuario": usuario}) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/shortcuts/__init__.py", line 53, in render homecoming httpresponse(loader.render_to_string(*args, **kwargs), file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/loader.py", line 169, in render_to_string homecoming t.render(context_instance) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/base.py", line 140, in render homecoming self._render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/test/utils.py", line 85, in instrumented_test_render homecoming self.nodelist.render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/base.py", line 840, in render bit = self.render_node(node, context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/debug.py", line 78, in render_node homecoming node.render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 123, in render homecoming compiled_parent._render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/test/utils.py", line 85, in instrumented_test_render homecoming self.nodelist.render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/base.py", line 840, in render bit = self.render_node(node, context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/debug.py", line 78, in render_node homecoming node.render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 155, in render homecoming self.render_template(self.template, context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 137, in render_template output = template.render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/base.py", line 140, in render homecoming self._render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/test/utils.py", line 85, in instrumented_test_render homecoming self.nodelist.render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/base.py", line 840, in render bit = self.render_node(node, context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/debug.py", line 78, in render_node homecoming node.render(context) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/defaulttags.py", line 447, in render six.reraise(*exc_info) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/template/defaulttags.py", line 433, in render url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 509, in reverse homecoming iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) file "/home/george/projetos/.virtualenvs/traxx/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 429, in _reverse_with_prefix (lookup_view_s, args, kwargs, len(patterns), patterns)) noreversematch: reverse 'perfil' arguments '(none,)' , keyword arguments '{}' not found. 1 pattern(s) tried: [u'usuarios/perfil/(?p<id>\\d+)/$']

as can see traceback, id passed in kwargs evaluated none. why not matching usuarios/perfil/(?p<id>\\d+)/$ url pattern.

in other words usuario_fake.pk value none.

upd:

the problem in template traceback complaining about.

django unit-testing django-testing

No comments:

Post a Comment