2012-01-10 17 views
6

誰でも、マイグレーション自体をテストした後、を書きましたか?デフォルト値は、間違った非正規化のための代わりにFalseTrueなどDjangoでのマイグレーションのテスト

のようなデフォルトの南の規則は番号で移行を開始することですので、あなたができない私は愚かな微妙なバグを見つけた私のDataMigrationsで非常に多くの回数、 __import__を使わずにインポートすることもできます。誰も似たような問題を思いついたのですか?人々はどのようにそれらを解決するのですか?

最も明白なアプローチは、別々のインポートされたモジュールで移行ロジックを保持し、それをテストすることですが、それはやや厄介です。

+0

なぜ新しいスキーマをテストする単体テストを書かないのですか?たとえば、値を指定せずにモデルを作成し、正しいデフォルトが使用されていることを確認します。 –

+0

@Michael:スキーママイグレーションは大丈夫ですが、データマイグレーションにはバグはありません。 – jammon

+0

この場合、マイグレーション・テスト用のデータベースを作成し、サンプル・データを取り込み、マイグレーションを実行して、最終値をテストすることができます。 –

答えて

2

私は同じ問題に遭遇しました。

from django.conf import settings 

class MyModel(models.Model): 
    stupid_error = models.BooleanField(default=False) 

    def __init__(self, *args, **kwargs): 
     super(MyModel, self).__init__(*args, **kwargs) 
     if settings.DEBUG: 
      assert not self.stupid_error 

[OK]を、それは少し不格好です:私はdatamigrationsのテストを行うための方法を見つけることができませんでしたので、私は、破損したデータを検出するためのアサーションを使用しました。しかし、それは動作するようです。

[編集] もう一度考えてみると、データマイグレーションそのものにテストを入れることができました。移行は一回限りのコードなので、何度も繰り返しテストする必要はありません。

class Migration(DataMigration): 
    def forwards(self, orm): 
     # lots of awesome migration code here 
     # ... 
     for m in orm.MyModel.objects.all(): 
      assert not m.stupid_error 
+0

わからない、一緒にはならないものを混ぜている、テストは一つのことであり、マイグレーションは別のものである.... – Arruda

0

私はかなり南に新しいですが、私はそれを使用して数回、私も単体テストを使用し、その後。/ manage.py testも移行を実行しました、これはすでに多くのバグを見つけるでしょう。

しかし、これはおそらくすべての場合に機能しません(これらの移行が実行されると、テストデータベースにはデータはないと思います)。

関連する問題