unitest test dirs django unit-testing fixtures

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 :

  1. Paso opcional: crear un archivo de fijación desde la base de datos: python manage.py dumpdata --format=json > api/fixtures/testdata.json
  2. Crear directorio de prueba: api/tests
  3. Crea el archivo vacío __init__.py en api/tests
  4. Crear archivo de prueba: test_fixtures.py

  1. 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.