web-dev-qa-db-fra.com

Quel est le moyen propre vers Unittest Filefield à Django?

J'ai un modèle avec unfildfield. Je veux le plus petit. =Django Cadre de test a de grandes façons de gérer la base de données et les courriels. Y a-t-il quelque chose de similaire pour les champs FileFields?

Comment puis-je vous assurer que les unit ne vont pas polluer la vraie application?

Merci d'avance

PS: Ma question est presque un duplicata de Django Test Filefield à l'aide de correctifs de test mais il n'a pas de réponse acceptée. Je veux juste ré-demander si quelque chose de nouveau sur ce sujet.

51
luc

Django offre une excellente façon de faire cela - utilisez un SimpleUploadeDedfile.

from Django.core.files.uploadedfile import SimpleUploadedFile

my_model.file_field = SimpleUploadedFile('best_file_eva.txt', 'these are the file contents!')

C'est l'une des caractéristiques magiques de Django - ce qui ne montre pas-show-in-the-docs :). Cependant, il est appelé ici .

83
waterproof

Je teste normalement des champs de fichiers dans des modèles utilisant doctest

>>> from Django.core.files import File
>>> s = SimpleModel()
>>> s.audio_file = File(open("media/testfiles/testaudio.wav"))
>>> s.save()
>>> ...
>>> s.delete()

Si j'ai besoin de tester également les téléchargements de fichiers avec des clients de test.

En ce qui concerne les luminaires, je copie simplement les fichiers dont j'ai besoin dans un dossier de test, après avoir modifié les chemins dans le luminaire.

par exemple.

Dans un appareil de fixation contenant des modèles avec FileFiels pointant vers un répertoire nommé "audio", vous remplacez "Audio": "Audio/audio.wav" avec "Audio": "Audio/Test/Audio.wav".
[.____.

Pas la façon la plus propre que je ne pense jamais, mais c'est ce que je fais.

12
Mirko Rossini

Si vous voulez juste créer un objet nécessitant Filefield et Ne voulez pas utiliser ce champ Ensuite, vous pouvez simplement passer un chemin relatif (existant ou non) comme celui-ci:

self.example_object = models.ExampleModel({'file': "foo.bar"})
self.example_object.save()

Ensuite, il est prêt à être utilisé.

1
Ctrl-C