8

私のdjangoアプリは、管理されていないテーブルで動作し、モデルで次のように定義されています:

class Meta:
    managed  = False
    db_table = 'mytable'

個人をインポートする簡単なテストを実行すると、次の結果が得られます。

(person)bob@sh ~/person/dapi $  > python manage.py test
Creating test database for alias 'default'...
DatabaseError: (1060, "Duplicate column name 'db_Om_no'")

tests.py は次のように非常に単純です。

import person.management.commands.dorecall
from person.models import Person
from django.test import TestCase
import pdb

class EmailSendTests(TestCase):
    def test_send_email(self):
        person = Person.objects.all()[0]
        Command.send_email()

「マネージド= Falseのモデルを含むテストの場合、テストセットアップの一部として正しいテーブルが作成されるようにするのはあなた次第です。」と書かれているdjangoドキュメントを読みました。したがって、適切なテーブルを作成しなかったことが問題であることを理解しています。test_personテストフレームワークが作成したデータベースにテーブルのコピーを作成する必要がありますか?

テストを実行するたびに、test_personデータベースが破壊され (私が思うに) 再セットアップされるので、test_person. 私はこれについて正しく考えていますか?

アップデート:

SOでこの質問を見て、に追加しManagedModelTestRunner()ましたutils.py。実行ManagedModelTestRunner()されますが(挿入して確認されますpbd.set_trace())、それでもDuplicate column nameエラーが発生します。実行してもエラーは発生しませんpython manage.py syncdb(テーブルが既に作成されているため、これはあまり意味がないかもしれませんが、テーブルを削除して syncdb を再実行し、手がかりが得られるかどうかを確認します)。

4

1 に答える 1

2

モデルのメタ プロパティにカスタム データベース名が設定されている、管理されていないレガシー データベースがあるという同じ問題がありました。

リンクしたように、マネージド モデル テスト ランナーを使用してテストを実行すると、問題の半分が解決されましたが、まだ Django が custom_db 名を認識していないという問題がありました。

django.db.utils.ProgrammingError: relation "custom_db" does not exist

問題は./manage.py makemigrations、管理されているかどうかにかかわらず、すべてのモデルの定義を引き続き作成し、定義にカスタム db 名を含めることでした。これはテストを爆破するようです。インストールすることにより:

pip install django-test-without-migrations==0.2

そして、次のようなテストを実行します:

./manage.py test --nomigrations

エラーが発生することなく、管理されていないモデルに対してテストを作成できました。

于 2015-07-29T17:46:20.423 に答える