Мне кажется, у меня та же проблема, поэтому, может быть, мы помогаем друг другу.У меня есть 3 файла
- один называется dbManager.js
- другой называется mssqlPool.js
- , а затемтестовый файл dbManager.test.js
Проверенные файлы находятся в папке . / src / db .
Тестовый файл находится в папке . / test / db (в основном скопировал дерево папок src).
Я хочу издеваться mssqlPool.js
module.exports = {
mssqlPool: async config => {
// actual connection with an await (in case it matters)
}
}
Вот DBManger, который является классом с конструктором:
const { mssqlPool } = require('./mssqlPool');
module.exports = class DBManager {
constructor(config) {}
}
async initPool() {
if (global.DB_TYPE === 'mssql') {
this.pool = await mssqlPool(this.config);
return true;
}}
const mssqlPool = require('../../../src/helpers/db/mssqlPool');
const DbManager = require('../../../src/helpers/db/dbManager');
let dbManager;
beforeEach(() => {
const mockedConfig = {
type: '<type: mssql/postgresql>',
user: '<user>',
password: '<mdp>',
server: '<host>',
database: '<db_name>',
pool: {
max: 10,
min: 0,
idleTimeoutMillis: 30000
}
};
dbManager = new DbManager(mockedConfig);
jest.spyOn(mssqlPool, 'mssqlPool').mockImplementation(() => Promise.resolve());
});
afterEach(() => {
jest.restoreAllMocks();
});
describe('DbManager', () => {
test('initPool', async () => {
global.DB_TYPE = 'mssql';
await dbManager.initPool();
expect(mssqlPool.mssqlPool).toHaveBeenCalled();
});});
И это не сработает, тест не пройден, потому что он фактически пытается использовать функцию mssqlPool и подключиться кБД, используя мой mockedConfig, тогда как я явно издевался над этой функцией с помощью
jest.spyOn(mssqlPool, 'mssqlPool').mockImplementation(() => Promise.resolve());
. Я уже изменил свой файл mssqlPool с module.exports=config=>{}
на module.exports={mssqlPool:config=>{}}
, чтобы иметь возможность использовать spyOn