私は次の問題に直面しています。この例では単体テストでDjango FileSystemStorageの設定をうまく置き換える(パッチする)にはどうすればいいですか?
class Package(models.Model):
name = models.CharField(max_length=64)
file = models.FileField(upload_to="subdir",
storage=settings.PACKAGE_STORAGE,
null=True)
エッセンシャルはFileField
コンストラクタの引数storage=
です:私はややこのようになりますモデルを持っています。それはsettings.py
の値で満たされます。そこには、次のコードがあります:
from django.core.files.storage import FileSystemStorage
PACKAGE_STORAGE = FileSystemStorage(location="/var/data", base_url="/")
生産上の使用のために、これはうまくいきます。しかし私の単体テストでは、私が行ったアップロードは生産データを含む/var/data
に書かれています。私は
from django.conf import settings # This is line 1
from tempfile import mkdtemp
settings.PACKAGE_STORAGE = FileSystemStorage(location=mkdtemp(), base_url="/")
# rest of the imports and testing code below
このよう
packages/tests.py
で
PACKAGE_STORE
をスワップアウトしようとしましたが、本当の問題は、したがって、テストファイルがロードされる
前に、
packages
アプリとそのモデルがすでにロードされているということです、そして、
PACKAGE_STORAGE
設定テストセットアップコードで変更する前に解決されました。
テストコンテキストでこの特定の設定を上書きする優雅な方法はありますか?
補足:私は 'location'と' storage'引数について怠惰な評価を試みましたが、役に立たなかった: 'FileSystemStorage'は' .startswith() '' FileField'は '' .get_valid_name() 'を呼び出すことによって、遅延した' storage = '引数をただちに評価します。 – nvie
'PACKAGE_STORAGE'とは何ですか? – Flimm