Я пытаюсь смоделировать объект соединения с базой данных, чтобы выполнить мои тесты, но ошибка, которую я получаю, всегда одинакова.
Я уже пробовал с другими решениями, но имитация всегда возвращает мне то же самое объект. После небольшого исследования и изменений я нашел другое решение, подобное этому
// connection.js
/* istanbul ignore file */
const mysql = require('mysql');
let pool;
const config = require('./config.js');
const connection = getPool();
/**
* Singleton pool connection
* @return {Pool} the pool connection
*/
function getPool() {
if (pool) {
return pool;
}
pool = mysql.createPool(config);
return pool;
}
module.exports = connection;
// database.js
const connection = require('./connection')
function find() {
return new Promise((resolve, reject) => {
const query = 'select * from table`;
connection.query(query, (err, res) => {
if (err) {
reject(new DatabaseError('Error'));
}
resolve(res);
});
});
}
, и, наконец, мой тестовый файл выглядит следующим образом
const database = require('./database.js');
const connection = require('./connection.js');
const { expect } = chai;
const DatabaseError = require('../../../src/errors/DatabaseError');
jest.mock('./connection.js');
describe('testing find all', () => {
test('testing error ', async () => {
connection.query.mockImplementation(() => (q, cb) => cb(res, null, null));
try {
await database.find();
} catch (e) {
expect(err).to.be.an.instanceof(DatabaseError);
}
});
});
Ошибка, которую я получаю, всегда одинакова
: Timeout - Async callback was not invoked within the 10000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 10000ms timeout specified by jest.setTimeout.Error:
11 | describe('test find all', () => {
> 12 | test('testing error ', async () => {
Я уже пытался использовать оператор return и async done
, но эта проблема не решается
любая помощь?
Причина, по которой я использую mockimplementation
, заключается в том, что мне нужно изменить каждый тест, который query
значение