加载夹具时 django unittest 出错
Posted
技术标签:
【中文标题】加载夹具时 django unittest 出错【英文标题】:Error in django unittest while loading a fixture 【发布时间】:2011-04-18 16:40:42 【问题描述】:我正在为 django 应用程序进行单元测试。我需要数据库中的一些数据进行测试,所以我使用的是 json 夹具。
我有两个固定装置:
-
对于用户来说,它工作正常。
对于某些网页
夹具2导致如下错误:
Problem installing fixture 'C:\Users\luc\Dev\Hg\mnl-adminpub\website\fixtures\website-unittest.json': Traceback (most recent call last):
File "C:\Python26\lib\site-packages\django\core\management\commands\loaddata.py", line 169, in handle
obj.save(using=using)
File "C:\Python26\lib\site-packages\django\core\serializers\base.py", line 165, in save
models.Model.save_base(self.object, using=using, raw=True)
File "C:\Python26\lib\site-packages\django\db\models\base.py", line 528, in save_base
result = manager._insert(values, return_id=update_pk, using=using)
File "C:\Python26\lib\site-packages\django\db\models\manager.py", line 195, in _insert
return insert_query(self.model, values, **kwargs)
File "C:\Python26\lib\site-packages\django\db\models\query.py", line 1479, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 783, in execute_sql
cursor = super(SQLInsertCompiler, self).execute_sql(None)
File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 727, in execute_sql
cursor.execute(sql, params)
File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", line 86, in execute
return self.cursor.execute(query, args)
File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 173, in execute
self.errorhandler(self, exc, value)
File "C:\Python26\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
OperationalError: (1366, "Incorrect string value: '\\xE2\\x80\\xA8<br...' for column 'html' at row 1")
我已经使用转储数据创建了夹具。我已经用 loaddata 对其进行了测试,它工作正常。我正在使用 mysql。
知道问题的可能原因吗?
感谢您的帮助
【问题讨论】:
您确定这是整个错误消息吗?我希望最后有一个异常描述。 @Gintautas :正确,对于这个复制和粘贴错误,我们深表歉意。我已经用完整的错误消息更新了我的问题 【参考方案1】:您应该使用TEST_CHARSET,但在 DATABASE 配置中。像这样:
DATABASES =
'default':
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_sbet',
'USER': 'test_sbet',
'TEST_CHARSET': 'UTF8',
【讨论】:
【参考方案2】:如果这只发生在测试期间,我会怀疑某些 TEST_ 设置,例如TEST_CHARSET。也许您的(常规,非测试)数据库有一些非默认字符集?如果是这样,您需要指定应该使用哪个字符集来设置测试数据库。
顺便说一句,如果您使用的是较旧的(1.2 之前的)版本,则应使用TEST_DATABASE_CHARSET 完成此操作。
【讨论】:
感谢答案。我正在取消 Django 1.2 不幸的是 TEST_CHARSET = 'latin1' 没有解决问题【参考方案3】:有同样的问题。在 MySql 数据库中使用utfmb4
并向TEST
字典添加CHARSET
键有助于(Django 1.11):
DATABASES =
'default':
'ENGINE': 'django.db.backends.mysql',
'OPTIONS':
...
'charset': 'utf8mb4',
,
'TEST': 'CHARSET': 'utf8mb4',,
【讨论】:
以上是关于加载夹具时 django unittest 出错的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中为 Selenium 测试加载夹具时出现完整性错误