dirs - integration test django
Dispositivos de carga en pruebas de unidad django (7)
Intento comenzar a escribir pruebas unitarias para django y tengo algunas preguntas sobre accesorios:
Hice un accesorio de todo mi proyecto db (no cierta aplicación) y quiero cargarlo para cada prueba, porque parece que cargar solo el accesorio para cierta aplicación no será suficiente.
Me gustaría tener el accesorio almacenado en /proj_folder/fixtures/proj_fixture.json.
Establecí FIXTURE_DIRS = (''/fixtures/'',)
en mi settings.py. Entonces en mi caso de prueba estoy intentando
fixtures = [''proj_fixture.json'']
pero mis accesorios no se cargan ¿Cómo se puede resolver esto? ¿Cómo agregar el lugar para buscar accesorios? En general, ¿está bien cargar el dispositivo para todo el test_db para cada prueba en cada aplicación (si es bastante pequeño)? ¡Gracias!
¿Realmente tiene una carpeta /fixtures/
en su disco duro?
Probablemente intentó usar:
FIXTURE_DIRS = (''/path/to/proj_folder/fixtures/'',)
Una buena práctica es usar la variable PROJECT_ROOT en su settings.py:
import os.path
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
FIXTURE_DIRS = (os.path.join(PROJECT_ROOT, ''fixtures''),)
He especificado la ruta relativa a la raíz del proyecto en el TestCase de la siguiente manera:
from django.test import TestCase
class MyTestCase(TestCase):
fixtures = [''/myapp/fixtures/dump.json'',]
...
y funcionó sin usar FIXTURE_DIRS
Hice esto y no tuve que dar una referencia de ruta, el nombre del archivo de instalación fue suficiente para mí.
class SomeTest(TestCase):
fixtures = (''myfixture.json'',)
En lugar de crear una carpeta de arreglos y colocar accesorios en ellos (en cada aplicación), una forma mejor y más ordenada de manejar esto sería colocar todos los dispositivos en una carpeta en el nivel del proyecto y cargarlos.
from django.core.management import call_command
class TestMachin(TestCase):
def setUp(self):
# Load fixtures
call_command(''loaddata'', ''fixtures/myfixture'', verbosity=0)
Invocar call_command
es equivalente a ejecutar:
manage.py loaddata /path/to/fixtures
Digamos que el nombre de su proyecto es hello_django
, tiene una aplicación llamada api
. A continuación se detallan los pasos para crear accesorios en api
:
- Paso opcional: crear un archivo de fijación desde la base de datos:
python manage.py dumpdata --format=json > api/fixtures/testdata.json
- Crear directorio de prueba:
api/tests
- Crea el archivo vacío
__init__.py
enapi/tests
- Crear archivo de prueba: test_fixtures.py
- Ejecute la prueba (cargará sus accesorios en la base de datos):
python manage.py test api.tests
Tienes dos opciones, dependiendo de si tienes un accesorio, o si tienes un conjunto de código Python para completar los datos.
Para los accesorios, use cls.fixtures
, como se muestra en una respuesta a esta pregunta,
class MyTestCase(django.test.TestCase):
fixtures = [''/myapp/fixtures/dump.json'',]
Para Python, use cls.setUpTestData
:
class MyTestCase(django.test.TestCase):
@classmethod
def setUpTestData(cls):
cls.create_fixture() # create_fixture is a custom function
setUpTestData
es llamado por TestCase.setUpClass
.
Puede usar ambos, en cuyo caso los dispositivos se cargan primero porque se llama a setUpTestData
después de cargar los dispositivos.