У меня есть довольно простой модуль, который использует модуль pg (node-postgre lib), я хотел бы реализовать тест Jest, и во время насмешек над модулем pg я хотел бы запустить его функцию обратного вызова, чтобы увидеть, как работает console.logи мой обратный вызов вызывается
Я издевался над модулем и пытался шпионить и заменить метод 'запроса', но он потерпел неудачу и сломался, любая идея, что я делаю неправильно?
Тестовый объект:
import {Pool} from 'pg';
const pool = new Pool();
module.exports = {
query: (text, params, callback) => {
const start = Date.now();
return pool.query(text, params, (err, res) => {
const duration = Date.now() - start;
console.log('executed query', {text, duration, rows: res.rowCount});
callback(err, res);
});
}
};
Тест:
jest.mock('pg');
import module from './index';
import { Pool } from 'pg'
beforeAll(() => {
Pool.mockImplementation(()=>{return jest.fn()});
});
it('callback is called', () => {
const cb = (err, res) => true;
const query = jest.spyOn(Pool, "query"); // <---- Not right, Error
query.mockImplementation((a,b,c) => c({},{}));
const resolve = module.query('QUERY TEXT', { a: 1, b: 2}, cb);
resolve(); // <---- Not what I expect
expect(cb).toBeCalled();
});
});
Сгенерирована ошибка: Ошибка: невозможно отслеживать свойство запроса, поскольку оно не является функцией;вместо этого дано неопределенное значение
20 | it('callback is called', () => {
21 | const cb = (err, res) => true;
> 22 | const query = jest.spyOn(Pool, "query");
| ^
23 | query.mockImplementation((a,b,c) => c({},{}));
24 | const resolve = module.query('QUERY TEXT', { a: 1, b: 2}, cb);
25 | resolve();
at ModuleMockerClass.spyOn (node_modules/jest-mock/build/index.js:697:15)
at Object.spyOn (src/db/index.test.js:22:24)
Спасибо