追記:migrateをスキップすることでDjangoのunittestを高速化する
この続きです。
結論を先に書くと、以下のsettingsでテストを動かす。テスト用のsqlite3ファイルは使わない。 *1
from .base import * DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', } } # MIGRATION_MODULESは各installed_appsにある名前をkeyに、当該appのmigrationファイルのモジュール(既定ではmigrationsモジュール)をvalue指定した辞書。 # 以下のクラス、どんなキーを指定しても辞書に存在し、どんなキーを指定しても`nomigrations`を返す辞書を作っている。 # 'nomigrations'モジュールは存在しないので、既存のmigrationファイルは見つからずにmigration未済みという扱いになる。 class DisableMigrations(object): def __contains__(self, item): return True def __getitem__(self, item): # return 'notmigrations' return False # django 1.11にも対応するにはこちらで MIGRATION_MODULES = DisableMigrations()
ドキュメントを見ると、
When using SQLite, the tests will use an in-memory database by default
とあるので、ファイルを指定しても :memory:
で実行されるんだろうか。
また、core/management/commands/migrate.pyやdb/migrations/loader.pyを見るに、migrationファイルが見つからない場合はその場でmigrationファイルを作って実行してくれるようだ。
Two Scoops of Django: Best Practices for Django 1.8
- 作者: Audrey Roy Greenfeld
- 出版社/メーカー: Lightning Source Inc
- 発売日: 2015/05/15
- メディア: ペーパーバック
- この商品を含むブログを見る