【发布时间】:2021-11-21 01:40:33
【问题描述】:
我正在尝试模拟 SQL Server 连接池,以便测试 DAL 的功能。
我有一个连接池文件
connectionPool.js
const sql = require('mssql');
const log = require('../services/logger');
const config = {
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
server: process.env.SERVER,
database: process.env.DATABASE
};
const poolPromise = new sql.ConnectionPool(config)
.connect()
.then(pool => {
log.info('Connected to SQL Server');
return pool;
})
.catch(err => {
log.error(err, 'Database connection failed');
});
module.exports = poolPromise;
我在 DAL 中使用它。非常精简,但必需品在那里。
const {poolPromise} = require('./connectionPool');
const getData = async () => {
const pool = await poolPromise;
const request = pool.request()
const result = await request('SELECT * FROM table');
}
这样,每个应用程序只创建一次连接池。 (见How can I use a single mssql connection pool across several routes in an Express 4 web application?)
我想模拟mssql 模块,以便连接池功能仍然有效。我尝试了多种选择。 How to mock SQL Server connection pool using Jest? 让我很接近,但它并不完全在那里。
__mocks/mssql.js
const mockExecute = jest.fn();
const mockInput = jest.fn(() => ({ execute: mockExecute }));
const mockRequest = jest.fn(() => ({ input: mockInput }));
jest.mock('mssql', () => ({
ConnectionPool: jest.fn(() => ({request: mockRequest})),
NVarChar: jest.fn()
}));
const sql = require('mssql');
module.exports = sql;
但是我得到了错误
TypeError: (中间值).connect 不是函数
17 |
18 | const poolPromise = new sql.ConnectionPool(config)
19 | .connect()
| ^
20 | .then(池 => {
21 | log.info('连接到 SQL Server');
22 |返回池;
【问题讨论】:
标签: node.js jestjs node-mssql