Ошибка в django unittest при загрузке прибора - PullRequest
4 голосов
/ 29 сентября 2010

Я делаю юнит-тесты для приложения django. Мне нужны некоторые данные в базе данных для моих тестов, поэтому я использую приспособление json.

У меня есть два светильника:

  1. для пользователей и работает нормально.
  2. для некоторых веб-страниц

Приспособление 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 ]

9 голосов
/ 11 января 2012

Вы должны использовать TEST_CHARSET , но внутри DATABASE config. Вот так:

DATABASES = {
      'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test_sbet',                      
        'USER': 'test_sbet',                      
        'TEST_CHARSET': 'UTF8',
    }
}
1 голос
/ 29 сентября 2010

Если это произойдет только во время тестирования, я бы заподозрил некоторые настройки TEST_, например TEST_CHARSET .Может быть, ваша (обычная, не тестовая) база данных имеет не кодировку по умолчанию?Если это так, вам нужно указать, для какой кодировки должна быть настроена тестовая база данных.

Кстати, если вы используете более старую (до 1.2) версию, то это должно быть сделано с помощью TEST_DATABASE_CHARSET .

0 голосов
/ 24 апреля 2017

Была такая же проблема.Помогло использование utfmb4 в базе данных MySql и добавление ключа CHARSET в словарь TEST (Django 1.11):

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