4

djangoアプリの単体テストを作成しています。テスト用にデータベースにいくつかのデータが必要なので、jsonフィクスチャを使用しています。

私は2つの備品を持っています:

  1. ユーザーにとっては問題なく動作します。
  2. 一部のWebページの場合

フィクスチャ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を使用しています。

問題の考えられる原因について何か考えはありますか?

ご協力いただきありがとうございます

4

3 に答える 3

9

TEST_CHARSETを使用する必要がありますが、DATABASE構成内で使用してください。そのように:

DATABASES = {
      'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test_sbet',                      
        'USER': 'test_sbet',                      
        'TEST_CHARSET': 'UTF8',
    }
}
于 2012-01-11T09:11:41.687 に答える
1

これがテスト中にのみ発生する場合は、 TEST_CHARSET などの TEST_ 設定の一部が疑われます。多分あなたの(通常の、テストではない)データベースにはデフォルト以外の文字セットがありますか?その場合は、テスト データベースを設定する文字セットを指定する必要があります。

ところで、古い (1.2 より前の) バージョンを使用している場合、これはTEST_DATABASE_CHARSETを使用して行う必要があります。

于 2010-09-29T08:16:58.537 に答える
1

同じ問題がありました。utfmb4MySqlデータベースで使用しCHARSET、辞書にキーを追加するとTEST役立ちました(Django 1.11):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            ...
            'charset': 'utf8mb4',
        },
        'TEST': {'CHARSET': 'utf8mb4',},
    }
}
于 2017-04-24T09:27:59.487 に答える