Python 3.4 で Django 1.7 を使用して単体テストを作成しています。file_data
以下のフォームは、要素がコメント アウトされている場合に正常に検証されます。含まれていると、file_data
検証されず、テストは失敗します。
from django.core.files.uploadedfile import SimpleUploadedFile
...
data = {
'phone_number': '123456',
'job': Job.objects.latest('id').pk,
}
file_data = {
'portrait': SimpleUploadedFile(
content=b'',
content_type='image/jpeg',
name='test.jpg',
)
}
form = PersonForm(data, file_data)
self.assertTrue(form.is_valid())
同様のコードFileField
は、私のサイトの他の場所にあるアップロード テストでも問題なく機能します。シェルでコードを実行すると、次のようになりform.errors
ます。'Upload a valid image. The file you uploaded was either not an image or a corrupted image.'
したがって、問題はcontent
またはcontent_type
フィールドのいずれかにあると思います。この回答のように、文字列としての画像を使用してみましたが、役に立ちませんでした。[編集: 文字列としてのイメージのアプローチは実際には答えでしたが、実装がうまくいかなかったに違いありません。受け入れられた回答は機能することが確認されています。] SimpleUloadedFile ソース コードに手がかりが見つかりませんでした。
フォームは実際には問題なく動作しますが、将来のメンテナンスのために動作テストで確実にカバーしたいと考えています。理想的には、test.jpg
イメージがファイルに含まれているため、実際のファイルが存在する.gitignore
必要はなく、現在非常にスムーズに自動化されている展開をハッキングし始める必要はありません。
SimpleUploadedFile
正しく検証するには、どのような入力を行う必要がありますか?