【发布时间】:2016-04-05 09:58:23
【问题描述】:
我正在 django 应用程序中为我的视图编写测试。以前它们位于我的视图所在的同一目录中。他们工作得很好。但后来我在 django 应用程序中将它们移动到文件夹名称 tests 中。没有导入错误,但我收到 NoReverseMatch 错误。我的目录结构如下。
Project
settings.py
urls.py
|my_app
|tests
|tests.py
|__init__.py
|migrations
|__init__.py
|views.py
|models.py
|urls.py
我的代码如下
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django
django.setup()
from rest_framework.reverse import reverse
from rest_framework import status
from rest_framework.test import APITestCase
class MyTests(APITestCase):
def test_01(self):
url = reverse('login')
data = {'username': 'username', 'password': 'StrongPassword'}
response = self.client.post(url, data)
self.assertEqual(response.data, my_expected_output)
我得到的错误是
NoReverseMatch: Reverse for 'login' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
谁能告诉我哪里做错了 我的 my_app/urls.py 文件是这样的
from rest_framework import routers
from my_app import views as app_views
from django.conf.urls import url, patterns, include
router = routers.DefaultRouter()
urlpatterns = [
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^login/$', app_views.login_view, name='login'),
url(r'^docs/', include('rest_framework_swagger.urls')),
url(r'^provider/$',
app_views.EntityViewSet.as_view({'get': 'list'}), name="provider-list"),
url(r'^provider/(?P<pk>\d+)/$',
app_views.EntityViewSet.as_view({'get': 'retrieve'}), name="provider-detail"),
]
urlpatterns += router.urls
我的主要 urls.py 是这样的。该文件与我的 settings.py 文件处于同一级别。我已经更新了我的目录结构。
urlpatterns = patterns(
'',
url(r'^app/', include('app.urls')),
)
【问题讨论】:
-
你能显示你的主要 urls.py 和 my_app.urls.py 吗?
-
我已经添加了我的主 urls.py 文件。我无法粘贴整个文件,因为它太大了。但我在主 urls.py 中包含了我的应用程序的 url。
-
app/urls.py 中是否有名为
login的url,它是什么样子的? -
就像 url(r'^login/', app.login_view, name='login'),
-
哦...但是我在许多其他 url 上都遇到了同样的错误,而且我的结尾是 '$'。
标签: django unit-testing django-rest-framework