Hay varias formas de abordar esto, pero todas son feas, ya que se supone que las pruebas unitarias deben estar aisladas, pero los archivos son sobre cambios duraderos.
Las pruebas de mi unidad no se ejecutan en un sistema con datos de producción, por lo que es fácil simplemente reiniciar el directorio de carga después de cada ejecución con algo como git reset --hard
. Este enfoque es, de alguna manera, el mejor, simplemente porque no implica cambios de código y está garantizado que funcionará siempre que comience con buenos datos de prueba.
Si usted realmente no necesita hacer nada con ese archivo después de probar método save de su modelo, me gustaría recomendar el uso de Michael Foord excelente Mock library de falsificar la File
instancia (es decir, algo así como mock_file = Mock(spec=django.core.files.File); mock_file.read.return_value = "fake file contents"
) para que pueda evitar por completo por completo cambios a su lógica de manejo de archivos. La biblioteca Mock tiene un par de maneras de globally patch Django's File class dentro de un método de prueba que es casi tan fácil como esto.
Si necesita tener un archivo real (es decir, para servir como parte de una prueba, procesarlo con un script externo, etc.) puede usar algo similar al ejemplo de Mirko y crear un File object después de asegurarse de que será almacenados en algún lugar apropiado - aquí hay tres maneras de hacerlo:
- Tiene su punto de prueba
settings.MEDIA_ROOT
a un directorio temporal (véase la función del módulo de Python tempfilemkdtemp
). Esto funciona bien siempre que tenga algo así como un STATIC_ROOT
separado que use para los archivos multimedia que son parte de su código fuente.
- Utilice una costumbre storage manager
- Establecer la ruta del archivo de forma manual en cada instancia del archivo o tienen una función personalizada upload_to señalar alguna parte que sus purgas proceso de instalación de prueba/desmontaje como un subdirectorio de prueba bajo
MEDIA_ROOT
.
Posible duplicado de [Django test FileField utilizando accesorios de prueba] (http://stackoverflow.com/questions/2266503/django-test-filefield-using-test-fixtures) – waterproof