No se permiten consultas de base de datos a ‘nueva-base-de-datos’ en este test.
He añadido una nueva base de datos en mi proyecto Django. Ahora tengo problemas con mis casos de prueba. Me aparece este mensaje de error en cada uno de mis casos de prueba:
Las consultas de base de datos a ‘nueva-base-de-datos’ no están permitidas en esta prueba.
He buscado soluciones para este problema y la solución común es agregar ‘databases = ‘all” o ‘databases = {‘default’, ‘nueva_base_de_datos’}’ a la clase TestCase.
Pero el problema es que ahora tenemos muchos casos de prueba en nuestra aplicación Django y muchas clases basadas en TestCase correspondientes. Por lo que no parece adecuado (específicamente en términos de escala) agregar esta declaración ‘databases = ‘all” o lo que sea a cada clase.
¿Tenemos alguna otra solución más adecuada para este problema?
(Después de todo, ¿por qué Django necesita hacer transacciones a ‘nueva_base_de_datos’ en todos los demás casos de prueba cada vez que no parece necesario en absoluto?)
davy.ai
Si ha añadido una nueva base de datos a su proyecto Django y está recibiendo el mensaje de error “Las consultas de la base de datos ‘nueva-base-de-datos’ no están permitidas en esta prueba” para todos sus casos de prueba, entonces la solución común es añadir
databases = '__all__'
odatabases = {'default', 'nueva_base_de_datos'}
a la clase TestCase. Sin embargo, si tiene muchos casos de prueba y clases basadas en TestCase correspondientes, esta solución puede resultar engorrosa y no escalable.Una solución alternativa es crear un programa personalizado para realizar pruebas que sólo ejecutará pruebas en la base de datos por defecto de manera predeterminada, y permitirá que pruebas específicas utilicen la nueva base de datos según sea necesario. Esto se puede hacer creando una subclase de
DiscoverRunner
de Django y sobrescribiendo el métodosetup_databases()
. En este método, se puede comprobar el atributodatabases
de cada caso de prueba para ver si incluye la nueva base de datos. Si lo hace, se puede crear una conexión de base de datos separada para ese caso de prueba y añadirlo al diccionarioconnections
. Si no lo hace, se puede simplemente usar la conexión de base de datos por defecto.Aquí hay un ejemplo de cómo podría verse el programa personalizado para realizar pruebas:
Con este programa personalizado para realizar pruebas, puede especificar la nueva base de datos sólo para los casos de prueba que lo requieran, sin tener que añadir
databases = '__all__'
odatabases = {'default', 'nueva_base_de_datos'}
a cada clase. Simplemente especifique la nueva base de datos en el atributo dedatabases
de los casos de prueba que lo requieran, así:Esta solución debería ser más escalable y fácil de mantener que añadir el atributo
databases
a cada clase de caso de prueba.