Django单元测试中的Unicode

时间:2011-10-10 09:07:27

标签: django unit-testing

我尝试在Django单元测试中使用utf8字符串并包含

# -*- coding: utf-8 -*-

但django-admin.py仍抱怨没有编码。

  

追踪(最近一次呼叫最后一次):

     

文件“/home/basti/work/virtualenv/bin/django-admin.py”,第5行,在          management.execute_from_command_line()

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/django/core/management/init.py”   第429行,在execute_from_command_line中       utility.execute()

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/django/core/management/init.py”   第379行,执行中       self.fetch_command(子命令).run_from_argv(self.argv)

     

文件   “> /home/basti/work/virtualenv/lib/python2.7/site-packages/django/core/management/base.py”,   第191行,在run_from_argv中       self.execute(* args,** options。 dict

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/django/core/management/base.py”   第220行,执行中       output = self.handle(* args,** options)

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/south/management/commands/test.py”   第8行,处理中       super(Command,self).handle(* args,** kwargs)

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/django/core/management/commands/test.py”   第37行,处理中       failures = test_runner.run_tests(test_labels)

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/django/test/simple.py”   第358行,在run_tests中       suite = self.build_suite(test_labels,extra_tests)

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/django/test/simple.py”   第248行,在build_suite中       suite.addTest(build_suite(APP))

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/django/test/simple.py”   第77行,在build_suite中       test_module = get_tests(app_module)

     

文件   “/home/basti/work/virtualenv/lib/python2.7/site-packages/django/test/simple.py”   第35行,在get_tests中       test_module = 导入('。'。join(app_path + [TEST_MODULE]),{},{},TEST_MODULE)

     

SyntaxError:第242行文件tests.py中的非ASCII字符'\ xc3',   但没有声明编码;见http://www.python.org/peps/pep-0263.html   详情

代码是

# - - 编码:utf-8 - -

"""                                                                                                                                                                                                         
This file demonstrates writing tests using the unittest module. These will pass                                                                                                                             
when you run "manage.py test".                                                                                                                                                                              

Replace this with more appropriate tests for your application.                                                                                                                                              
"""

from django.test import TestCase, Client
from django.contrib.auth.models import User
from django.db.utils import IntegrityError
from django.core.urlresolvers import reverse
from django.utils.encoding import smart_unicode

class ViewTests(TestCase):
    def setUp(self):
    self.client = Client()

   def test_french(self):
    self.client.cookies["django_language"] = 'fr'
    r = self.client.get("/")
    self.assertTrue(smart_unicode(u"Se déconnecter") in r.content)

我尝试将TEST_CHARSET和TEST_DATABASE_CHARSET设置为utf8,但仍然没有运气。

有关如何解决的任何提示?

TIA&&祝你有愉快的一天!

巴斯蒂

4 个答案:

答案 0 :(得分:3)

把:

# -*- coding: utf-8 -*-

作为该档案的第一行。

答案 1 :(得分:2)

要回答我自己的问题,问题不是匹配的字符串,而是请求内容的编码! 随后更改测试将其修复

self.assertTrue(你在r.content.decode('utf8')中的“sedéconnecter”)

答案 2 :(得分:0)

确保您在每个文件中定义了编码,包括模型,当然还有tests.py。如果可能,请获取最新版本的django。

如果管理员仍然无法使用,请尝试:

解决方案#1:

from django.utils.encoding import smart_unicode

关于模型定义:

def __unicode__(self):  
    return smart_unicode(("%s" % self.field))

解决方案#2:文字方法

def __unicode__(self):   
    return (u"%s" % self.field)  

始终设置

DEFAULT_CHARSET='utf-8'  
在settings.py

你也可以翻译[这篇文章] [1]   [1]:来自西班牙语的http://www.pvilas.com/2011/03/django-evitar-error-en-el-administrador.html。我希望可以提供帮助。

答案 3 :(得分:0)

我遇到了这个问题,因为我的models.py编码没有为该文件设置。将# -*- coding: utf-8 -*-放在我的models.py中,并在我的测试文件中使用相同的解决方案。