Вы можете макетировать db.execute
, чтобы ничего не делать, и использовать макет, чтобы получить переданные ему аргументы.
Аргументы - это запрос и обратный вызов, поэтому вам просто нужно проверить, что запрос корректени обратный вызов работает, как и ожидалось.
Вот упрощенный рабочий пример для начала работы:
import * as express from 'express';
const db = require('../../db/client');
function getCampaigns(req: express.Request, res: express.Response) {
db.execute('select * from campaign_definitions', (err: any, result: any) => {
res.send(result.rows);
});
}
test('getCampaigns', () => {
const res: any = { send: jest.fn() };
const mock = jest.spyOn(db, 'execute'); // spy on db.execute...
mock.mockImplementation(() => {}); // <= ...and mock the implementation
getCampaigns({} as any, res);
const args = db.execute.mock.calls[0]; // <= get the args passed to db.execute
const query = args[0];
const callback = args[1];
callback(null, { rows: 'the rows' }); // <= call the callback
expect(query).toBe('select * from campaign_definitions'); // Success!
expect(res.send).toHaveBeenCalledWith('the rows'); // Success!
})