2010-09-29 2 views
4

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

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

  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.

Любая идея о возможной причине проблемы?

Спасибо за вашу помощь

+0

Вы уверены, что это все сообщение об ошибке? Я надеялся на описание исключения в конце. –

+0

@Gintautas: Исправьте, извините за эту копию и вставьте ошибку. Я обновляю свой вопрос с полным сообщением об ошибке – luc

ответ

9

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

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

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

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

+0

Thnaks для ответа. Я не знаю Django 1.2 – luc

+0

К сожалению TEST_CHARSET = 'latin1' не решает проблему – luc

0

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

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'OPTIONS': { 
      ... 
      'charset': 'utf8mb4', 
     }, 
     'TEST': {'CHARSET': 'utf8mb4',}, 
    } 
} 
Смежные вопросы