Quel est le moyen propre à unittest FileField dans django?
J'ai un modèle avec une FileField. Je veux unittest il. django framework de test a beaucoup de façons de gérer la base de données et e-mails. Est-il quelque chose de similaire pour FileFields?
Comment puis-je m'assurer que le unittests ne vont pas polluer l'application réelle?
Merci d'avance
PS: Ma question est presque une copie de Django test FileField à l'aide d'appareils de test mais il n'a pas accepté de répondre. Juste envie de re-demander si quelque chose de nouveau sur ce sujet.
- Double Possible de Django test FileField à l'aide d'appareils de test
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs façons de régler cela, mais ils sont tous moche depuis les tests unitaires sont censés être isolés, mais les fichiers sont tout au sujet de changements durables.
Mes tests unitaires ne pas s'exécuter sur un système avec les données de production de sorte qu'il est facile de simplement réinitialiser le répertoire de téléchargement après chaque course avec quelque chose comme
git reset --hard
. Cette approche est, à certains égards, le meilleur, tout simplement parce qu'il n'implique pas de modifications de code et est garanti pour fonctionner aussi longtemps que vous commencez avec de bonnes données de test.Si vous n'avez pas réellement besoin de faire quelque chose avec ce fichier après le test de votre modèle de la méthode save, je vous recommande d'utiliser python est un excellent Maquette de la bibliothèque complètement faux la
File
instance (c'est à dire quelque chose commemock_file = Mock(spec=django.core.files.File); mock_file.read.return_value = "fake file contents"
) de sorte que vous pouvez éviter complètement les modifications apportées à votre fichier logique de gestion. La Maquette de la bibliothèque a un couple de façons de à l'échelle mondiale patch de Django reinhardt, Fichier de classe à l'intérieur d'une méthode de test qui est à peu près aussi facile que cela va obtenir.Si vous avez besoin d'avoir un fichier réel (c'est à dire pour servir dans le cadre d'un test, le traitement avec un script externe, etc.) vous pouvez utiliser quelque chose de similaire à Mirko l'exemple et créer un Fichier objet après avoir fait sûr que ça va être stocké dans un endroit approprié ici sont les trois façons de le faire:
settings.MEDIA_ROOT
pointer vers un répertoire temporaire (voir le Python tempfile du modulemkdtemp
fonction). Cela fonctionne très bien tant que vous avez quelque chose comme un distinctSTATIC_ROOT
que vous pouvez utiliser pour les fichiers multimédia qui sont une partie de votre code source.MEDIA_ROOT
.Edit: mock object library qui est nouveau dans la version de python 3.3. Pour les anciennes versions de python vérifier Michael Foord version
Django fournit un excellent moyen pour ce faire utiliser un SimpleUploadedFile.
C'est l'un de django est magique caractéristiques-qui-ne-show-place-dans-le-docs :). Toutefois, il est appelé à ici.
J'ai l'habitude de tester filefields dans les modèles à l'aide de doctest
Si j'en ai besoin j'ai aussi tester les uploads de fichier avec test clients.
Comme pour les montages, je copie simplement les fichiers dont j'ai besoin dans un dossier de test, après la modification des chemins dans le luminaire.
par exemple
Dans un appareil 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" .
Maintenant, tout ce que vous avez à faire est de copier le dossier de test, avec les fichiers nécessaires, dans "audio" dans la configuration de test et de le supprimer dans le démontage.
Pas la façon la plus propre jamais je pense, mais c'est ce que je fais.
Si vous voulez juste créer un objet qui nécessite FileField et ne souhaitez pas utiliser ce champ, alors vous pouvez simplement passer tout (existante ou non) chemin d'accès relatif comme ceci:
Il est prêt pour l'utilisation.