Estoy usando Jest, Node 12 y Postgres. Soy un novato en pruebas y leí que establecer un nuevo objeto de base de datos (en mi caso, con secuencia) es la mejor práctica en cada script de prueba. Entonces, si quiero probar una función en mi sistema, tendría que pasar esta nueva conexión a la base de datos como argumento para la función.
En este momento, lo estoy agregando al objeto ctx (o contexto) que ahora me doy cuenta de que podría tener algunos agujeros de seguridad.
¿Es mejor pasar la conexión de la base de datos como un argumento separado en una función, o inicializar la base de datos globalmente en una exportación en un archivo " db.js " o algo así, y luego pasar una bandera booleana en las funciones de mi sistema?
Es decir
function myFunc(5, 'some data', ctx) { ... } // Where ctx.database is either my live db or test dbo
function myFunc(5, 'some data', databaseInstance, ctx) { ... } // Where databaseInstance is either my live db or test dbo
function myFunc(5, 'some data', isTest, ctx) { ... } // If isTest = true then use testDb object y en db.js
export const liveDb = { ... }; export const testDb = { ... };En este contexto, por "mejor" me refiero a lo más seguro y lo más común.
La forma más común sería usar process.NODE_ENV para distinguir entre entornos de prueba, desarrollo y producción.
Entonces, su db.js se puede refactorizar en algo como esto:
const liveDb = { ... }; const testDb = { ... }; let db = testDb; // default if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') { db = testDb } if (process.env.NODE_ENV === 'production') { db = liveDb } export default db;De esa forma, cualquier importador de db.js recibirá el objeto db adecuado según el entorno actual. Jest establece automáticamente la variable NODE_ENV en 'test' . Además, la mayoría de los entornos de alojamiento de nodejs configurarán automáticamente NODE_ENV en 'producción', o puede configurarlo manualmente en su secuencia de comandos de inicio