Соединение с MySQL: ошибка типа: соединение.запрос — это не функция

#node.js #mocking #chai #sinon #sinon-chai

Вопрос:

Я пишу единый модульный тест для метода, который требует подключения к базе данных. Я пытаюсь поиздеваться над этим с синон.поиздеваться, однако я получаю бросок:

  TypeError: connection.query is not a function
 

Почему это происходит, разве mock не должен просто соответствовать моим условиям и выполнять функцию?
Мне все равно, что он вернет, мне просто важно, выполнит ли он sth.
Не могли бы вы, пожалуйста, рассказать мне, как правильно его реорганизовать?
Пока мне не нужен заглушка, я просто хочу проверить, как моя функция будет вести себя в разных условиях.

тестовый случай:

 const sinon = require('sinon');
const chai = require('chai');
chai.use(require('sinon-chai'));
chai.use(require('chai-as-promised'));

const {Connection} = require('mysql');
...OTHER IMPORTS

describe('queries', () => {
    let connectionMock;

    before(() => {
        connectionMock = sinon.mock(Connection);
    });

    describe('TEST CASE', () => {
        const partialProp = {
            id: 1,
            date: '2019-08-23',
        };
        const accoId = 11;

        it('TEST CASE v1', async () => {
            const getSpy = sinon.spy(getAcco);

            const prop = {...partialProp, accoId, cpId: null};
            await getProp(prop, connectionMock);
            chai.expect(getSpy).to.have.been.calledWith(prop, sinon.match.any);
        });

    });
});
 

Код для тестирования:

 export const getProp = async (prop, connection) => {

    if (prop.accoId !== null) {
        const acco = await getAcco(prop.accoId!, connection); <-- this fails because uses connection.query from mysql 
        
    } else {
      ....
    }
};

export const getAcco = async (id, connection) => {
    return new Promise((resolve, reject) => {
        connection.query(MY_QUERY_STRING, parameters, (err, result: any) => {
            if (err) {
                console.error('db error', err);
                reject(new Error('Error communicating with database.'));
            } else {
                resolve(result);
            }
        });
    });
}