如何用 sinon 存根 oracledb?
How to stub oracledb with sinon?
这是我的函数,一旦它从 oracle 数据库获取数据,它将 return 一个承诺:
const getDataFromOracleDB = (filter, query) =>
new Promise(async (resolve, reject) => {
let conn;
try {
conn = await oracledb.getConnection(dbConfig);
const result = await conn.execute(query, [filter]);
const { rows } = result;
...
catch (err) {
...
}
};
作为单元测试,我想存根 conn.execute
,但不知道该怎么做。我已经尝试过:
const stub = sinon.stub(conn, 'execute').returns([1, 2, 3]);
但是得到了:
TypeError: Cannot stub non-existent own property execute
有什么建议吗?
我无法用您提供的代码复制错误,但也许这个快速模型会有所帮助:
const chai = require('chai');
const sinon = require('sinon');
const oracledb = require('oracledb');
const config = require('./dbConfig.js');
const expect = chai.expect;
sinon.stub(oracledb, 'getConnection').resolves({
execute: function() {},
close: function() {}
});
describe('Parent', () => {
describe('child', () => {
it('should work', async (done) => {
let conn;
try {
conn = await oracledb.getConnection(config);
sinon.stub(conn, 'execute').resolves({
rows: [[2]]
});
let result = await conn.execute(
'select 1 from dual'
);
expect(result.rows[0][0]).to.equal(2);
done();
} catch (err) {
done(err);
} finally {
if (conn) {
try {
await conn.close();
} catch (err) {
console.error(err);
}
}
}
});
});
});
查询通常会 return 值为 1,但此 returns 2 并通过。
这是我的函数,一旦它从 oracle 数据库获取数据,它将 return 一个承诺:
const getDataFromOracleDB = (filter, query) =>
new Promise(async (resolve, reject) => {
let conn;
try {
conn = await oracledb.getConnection(dbConfig);
const result = await conn.execute(query, [filter]);
const { rows } = result;
...
catch (err) {
...
}
};
作为单元测试,我想存根 conn.execute
,但不知道该怎么做。我已经尝试过:
const stub = sinon.stub(conn, 'execute').returns([1, 2, 3]);
但是得到了:
TypeError: Cannot stub non-existent own property execute
有什么建议吗?
我无法用您提供的代码复制错误,但也许这个快速模型会有所帮助:
const chai = require('chai');
const sinon = require('sinon');
const oracledb = require('oracledb');
const config = require('./dbConfig.js');
const expect = chai.expect;
sinon.stub(oracledb, 'getConnection').resolves({
execute: function() {},
close: function() {}
});
describe('Parent', () => {
describe('child', () => {
it('should work', async (done) => {
let conn;
try {
conn = await oracledb.getConnection(config);
sinon.stub(conn, 'execute').resolves({
rows: [[2]]
});
let result = await conn.execute(
'select 1 from dual'
);
expect(result.rows[0][0]).to.equal(2);
done();
} catch (err) {
done(err);
} finally {
if (conn) {
try {
await conn.close();
} catch (err) {
console.error(err);
}
}
}
});
});
});
查询通常会 return 值为 1,但此 returns 2 并通过。