maa*_*zza 3 python django unit-testing django-cms django-sekizai
如何在 django 中编写测试?我阅读了文档:https://docs.djangoproject.com/en/dev/topics/testing/overview/
但是我们使用 django-cms 和 sekizai 所以当我做一个简单的测试时,例如:
from django.test import TestCase
from django.test.client import Client
class AccessTest(TestCase):
def setUp(self):
# Every test needs a client.
self.client = Client()
def test_details(self):
# Issue a GET request.
response = self.client.get('/')
# Check that the response is 200 OK.
self.assertEqual(response.status_code, 200)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Traceback (most recent call last): File "/home/maazza/PycharmProjects/django_my_app/search_engine/tests.py", line 18, in test_details
response = self.client.get('/') File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/test/client.py", line 439, in get
response = super(Client, self).get(path, data=data, **extra) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/test/client.py", line 244, in get
return self.request(**r) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/test/client.py", line 381, in request
response = self.handler(environ) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/test/client.py", line 84, in __call__
response = self.get_response(request) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 153, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 228, in handle_uncaught_exception
return callback(request, **param_dict) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/utils/decorators.py", line 91, in _wrapped_view
response = view_func(request, *args, **kwargs) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/views/defaults.py", line 33, in server_error
return http.HttpResponseServerError(t.render(Context({}))) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/base.py", line 140, in render
return self._render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/test/utils.py", line 62, in instrumented_test_render
return self.nodelist.render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/base.py", line 823, in render
bit = self.render_node(node, context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/debug.py", line 74, in render_node
return node.render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 123, in render
return compiled_parent._render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/test/utils.py", line 62, in instrumented_test_render
return self.nodelist.render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/base.py", line 823, in render
bit = self.render_node(node, context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/debug.py", line 74, in render_node
return node.render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 123, in render
return compiled_parent._render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/test/utils.py", line 62, in instrumented_test_render
return self.nodelist.render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/base.py", line 823, in render
bit = self.render_node(node, context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/django/template/debug.py", line 74, in render_node
return node.render(context) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/classytags/core.py", line 106, in render
return self.render_tag(context, **kwargs) File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/sekizai/templatetags/sekizai_tags.py", line 74, in render_tag
if not validate_context(context): File "/home/maazza/.virtualenvs/django_my_app/local/lib/python2.7/site-packages/sekizai/templatetags/sekizai_tags.py", line 28, in validate_context
"You must enable the 'sekizai.context_processors.sekizai' template " TemplateSyntaxError: You must enable the 'sekizai.context_processors.sekizai' template context processor or use 'sekizai.context.SekizaiContext' to render your templates.
Run Code Online (Sandbox Code Playgroud)
您必须启用“sekizai.context_processors.sekizai”
关于这部分我sekizai.context_processors.sekizai在我的TEMPLATE_CONTEXT_PROCESSORS.
http://racingtadpole.com/blog/testing-django-cms-sites/
\n\n\n\n\n这很令人困惑,因为我在我的模板中正确使用了 sekizai。
\n\n这篇文章为我指明了正确的方向。问题是\n Django 引发了一个异常,但我从未看到它\xe2\x80\x93\n 只是这条不太有用的消息。
\n\n这篇 Stackoverflow 文章解释了如何启用错误日志记录。我复制了对 settings.py 的更改,将它们包装在 if\n \'test\' 语句中。
\n\n然后当我跑的时候
\n\n./manage.py测试
\n\n我收到了一条更有用的错误消息:我忘记设置一个我的模板假设存在的表。轻松修复!
\n\n希望对其他人有帮助。
\n
我需要添加一些固定装置才能使其工作。
\n\n编辑:\n好吧,经过大量研究,我发现尽管有上述博客,但我遇到了不同的问题。
\n\n感谢这个答案和这个文档,我知道我必须这样做:
\n\nfrom django.test import TestCase\nfrom django.test.client import Client\nfrom cms.test_utils.testcases import CMSTestCase\nfrom django.test.utils import override_settings\nfrom cms.models import Page\nfrom django.contrib import admin\nfrom django.conf.urls import url, patterns, include\nfrom django.conf import settings\n\nurlpatterns = patterns(\'\',\n url(r\'^admin/\', include(admin.site.urls)),\n url(r\'^search_engine/\', include(\'search_engine.urls\')),\n url(r\'\', include(\'cms.urls\')),\n)\n\n\nclass AccessTest(CMSTestCase):\n\n def setUp(self):\n # Every test needs a client.\n p = Page.objects.create(site_id=settings.SITE_ID, template=\'home_page.html\')\n p.publish()\n self.client = Client()\n\n @override_settings(ROOT_URLCONF=\'search_engine.tests\')\n def test_details(self):\n # Issue a GET request.\n response = self.client.get(\'/\')\n\n # Check that the response is 200 OK.\n self.assertEqual(response.status_code, 200)\nRun Code Online (Sandbox Code Playgroud)\n\n如何对 Django-CMS 扩展进行单元测试?\nand http://docs.django-cms.org/en/latest/extending_cms/testing.html <= 不知何故,这只能在“最新”中读取
\n\n\n\n8.1.1. 解析视图名称
\n\n您的应用程序需要测试,但在您的实时站点中,它们在 urls.py\n 中\xe2\x80\x99t,因为它们附加到 CMS 页面。因此,如果您希望能够在测试中使用\n reverse(),或者测试使用 url 模板\n 标签的模板,则需要将您的应用程序连接到 urls.py\n 的特殊测试版本\n 并告诉你的测试来使用它。
\n\n因此,您可以使用以下代码创建 myapp/tests/test_urls.py:
\n\nfrom django.contrib import admin from django.conf.urls import url,\n 模式,包括
\n\nurlpatterns = 模式(\'\',\n url(r\'^admin/\', include(admin.site.urls)),\n url(r\'^myapp/\', include(\'myapp .urls\')),\n url(r\'\', include(\'cms.urls\')), )
\n\n然后在您的测试中,您可以使用 override_settings() 装饰器将其插入:
\n\n从 django.test.utils 导入 override_settings from\n cms.test_utils.testcases 导入 CMSTestCase
\n\n类 MyappTests(CMSTestCase):
\n\nRun Code Online (Sandbox Code Playgroud)\n\n@override_settings(ROOT_URLCONF=\'myapp.tests.test_urls\')\ndef test_myapp_page(self):\n test_url = reverse(\'myapp_view_name\')\n # rest of test as normal\n如果您想在整个测试类中使用测试 url conf,那么您可以使用将装饰器应用于整个类:
\n\n从 django.test.utils 导入 override_settings from\n cms.test_utils.testcases 导入 CMSTestCase
\n\n@override_settings(ROOT_URLCONF=\'myapp.tests.test_urls\') 类\n MyappTests(CMSTestCase):
\n\nRun Code Online (Sandbox Code Playgroud)\ndef test_myapp_page(self):\n test_url = reverse(\'myapp_view_name\')\n # rest of test as normal\n
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |