加载夹具时django unittest出错

时间:2010-09-29 07:51:17

标签: python django django-testing django-fixtures

我正在为django应用程序进行单元测试。我需要在数据库中为我的测试提供一些数据,所以我使用的是json fixture。

我有两个灯具:

  1. 对于用户来说还可以。
  2. 对于某些网页
  3. 夹具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")
    

    我用dumpdata创建了夹具。我用loaddata测试了它,它工作正常。我正在使用mysql。

    对问题的可能原因有任何想法吗?

    感谢您的帮助

3 个答案:

答案 0 :(得分:9)

您应该使用TEST_CHARSET,但 DATABASE配置中。像那样:

DATABASES = {
      'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test_sbet',                      
        'USER': 'test_sbet',                      
        'TEST_CHARSET': 'UTF8',
    }
}

答案 1 :(得分:1)

如果这只在测试期间发生,我会怀疑某些TEST_设置,如TEST_CHARSET。也许你的(常规,不测试)db有一些非默认的字符集?如果是这样,您需要指定应该使用哪个charset设置测试数据库。

BTW,如果您使用的是旧版(1.2之前的版本),则应使用TEST_DATABASE_CHARSET完成此操作。

答案 2 :(得分:0)

有同样的问题。在MySql数据库中使用utfmb4并在CHARSET字典中添加TEST密钥帮助(Django 1.11):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            ...
            'charset': 'utf8mb4',
        },
        'TEST': {'CHARSET': 'utf8mb4',},
    }
}