Entonces, en el primer archivo, digamos db.ts, exporta una función, llamémosla dbHandler, con un contenido similar al siguiente:
try { let db = new sqlite3.Database('./sampleDBName.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err: Error) => { if (err) { console.error(err.message); } console.log('Connected to the database.'); }); db.serialize(function() { db.run("CREATE TABLE IF NOT EXISTS sample_table (id VARCHAR, sample_data INTEGER, PRIMARY KEY (id))") // ensure table exists .run("INSERT OR IGNORE INTO sample_table (id, sample_data) VALUES ($1)", ['1',1]) // ensure row exists .all("SELECT * FROM sample_table WHERE id = $1", [1], async (error: Error, rows: Array<any>) => { if(error) { console.log(error); } // logic in here (calls other functions & more based on data in rows) sampleObjectMock.objectFunc({content: "sample content"}); }); }); db.close((err: Error) => { if (err) { return console.error(err.message); } console.log('Close the database connection.'); }); } catch(e) { console.log(e); }Y en el archivo index.spec.ts (prueba):
describe("sample use case", () => { it("sample test", async () => { let sampleObjectMock = { objectFunc: jest.fn() } await dbHandler(sampleObjectMock); expect.assertions(1); expect(sampleObjectMock.objectFunc).toHaveBeenCalledWith({content: "sample content"}); } }Recibo errores que indican lo siguiente para cada sesión de consola al abrir y cerrar la base de datos:
"No se puede iniciar sesión después de realizar las pruebas. ¿Se olvidó de esperar algo asíncrono en su prueba?"
Además de esto, nunca se llama a 'objectFunc ()', funciona fuera del entorno de prueba de broma; creo que no funciona debido a que las funciones de devolución de llamada de las llamadas a la base de datos solo se ejecutan después de que las pruebas ya se han ejecutado para finalización de forma asíncrona. ¿Algunas ideas?
He intentado agregar jest.runAllTimers() o jest.runAllTicks(), pero tengo poca experiencia con este tipo de funciones y no parecen cambiar nada. Gracias de antemano si alguien puede ayudar con esto.