node.js - 无法在使用 oracledb npm 的 nodejs typescript 类的开玩笑单元测试中模拟 oracledb.getConnection()
问题描述
这是使用 oracledb npm 执行查询或 getConnection 的 nodejs typescript 类。
我无法在开玩笑的单元测试中模拟 oraclebd getConnection。
如何为 executeQuery 编写单元测试。它显示要在 finally 块所有语句上完成的测试覆盖率。
我写了单元测试但是
import { Inject, Injectable } from '@nestjs/common';
import * as oracledb from 'oracledb';
import { ORACLE_DB_OPTIONS } from '../constant';
import { OracleDBOptions } from '../interface';
import { PromInstanceCounter, PromMethodCounter } from '@digikare/nestjs-prom';
@PromInstanceCounter
@Injectable()
export class OracleDBService {
constructor(
@Inject(ORACLE_DB_OPTIONS)
private readonly oracleDbOptions: OracleDBOptions[],
) { }
@PromMethodCounter()
async executeQuery(
dbName: string,
query: string,
bindValue: any[] = [],
) {
let localConnection: any;
try {
const oracleDbOption = this.oracleDbOptions.filter(
x => x.name === dbName,
);
if (!oracleDbOption) {
throw Error('Connection string does not exist');
}
localConnection = await oracledb.getConnection({
user: oracleDbOption[0].user,
password: oracleDbOption[0].password,
connectString: oracleDbOption[0].connectString,
});
const result = await localConnection.execute(query, bindValue);
await localConnection.close();
return result;
} finally {
if (localConnection) {
try {
await localConnection.close();
} catch (err) {
console.log('Error when closing the database connection: ', err);
}
}
}
}
@PromMethodCounter()
async getConnection(dbName: string) {
const oracleDbOption = this.oracleDbOptions.filter(x => x.name === dbName);
if (!oracleDbOption) {
throw Error('Connection string does not exist');
}
const localConnection = await oracledb.getConnection({
user: oracleDbOption[0].user,
password: oracleDbOption[0].password,
connectString: oracleDbOption[0].connectString,
});
return localConnection;
}
}
getConnection() 方法的书面单元测试。
describe('OracleDbService', () => {
let oracleDBService: OracleDBService;
let oracleDBOptions = [
{
name: 'rfdest',
user: 'rfdest',
password: 'rfdest',
connectString: 'alsyntstb.ohlogistics.com:1521/syntstb',
},
{
name: 'DOCGENDEV',
user: 'DOCGENDEV',
password: 'DocGen$dev18',
connectString: 'alsynwebd.ohlogistics.com/synwebd_maint',
},
];
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
OracleDBService,
{
provide: ORACLE_DB_OPTIONS,
useValue: oracleDBOptions,
},
],
}).compile();
oracleDBService = module.get<OracleDBService>(OracleDBService);
});
it('should be defined', () => {
expect(oracleDBService).toBeDefined();
});
it('getConnection success', () => {
jest.fn(getConnection).mockReturnValue({
execute: function() {},
close: function() {},
});
oracleDBService.getConnection('rfdest').then(resolve => {
expect(resolve).not.toBeNull();
});
});
it('getConnection throw error', () => {
jest.fn(getConnection).mockReturnValue({
execute: function() {},
close: function() {},
});
oracleDBService
.getConnection('')
.then(resolve => {
expect(resolve).not.toBeNull();
})
.catch(reject => {
expect(reject).not.toBeNull();
});
});
});
解决方案
推荐阅读
- jquery - 如何将 Fomantic-UI 导入 Angular 项目
- python - 将 Spacy 训练数据格式转换为 Spacy CLI 格式(用于空白 NER)
- c++ - 如何为文本 rpg 库存创建添加项目功能?
- c# - 带有动画 xamarin 表单的 ScrollView
- python - 用机会滚动轮盘赌并计算多次滚动的最大同侧序列
- php - 使用 html 按钮运行 shell 脚本
- sql - 如何将 nvarchar 转换为 uniqueidentifer?
- snowflake-cloud-data-platform - 无法使用 snowsql 连接到雪花数据库
- grails - grails 4 从另一个标记库调用命名空间标记库
- python-3.x - mpmath : 无法创建 mpf