我正在尝试测试一个使用pg模块查询数据库的函数,下面是我如何使用它:
const { Pool } = require('pg');
const { liveDB } = require('../config/db');
const pool = new Pool(liveDB);
exports.query = async (query) => {
const client = await pool.connect();
try {
var result = await client.query(query);
console.log('result from db.query', result);
return result;
} catch (err) {
console.log('ERROR in db.query')
console.error(err);
throw err;
} finally {
console.log('Releasing client');
await client.release();
}
};通常,我会存根这样的函数(db.saveUser在这里是一个假函数,但它确实会被正确地短截):
var stub = sinon.stub(db, 'saveUser').callsFake(() => { return 'Saved from stub' });然而,这并不适用于pg模块,我尝试过在构造函数、池、.connect、.release甚至整个模块中顽固使用,但由于某种原因,似乎没有任何东西能工作。
PS: --我也尝试过在所有变量上更改const为var,因为我认为这是原因,结果是相同的。我也尝试了承诺在存根,在几个方面,没有改变。
发布于 2017-09-08 21:07:41
创建一个返回pg客户端的新函数,并在query函数中使用它:
// db.js
exports.getPgClient = () => {
return pool.connect();
};
exports.query = async (query) => {
const client = await exports.getPgClient();
...
};在您的测试中,为getPgClient函数创建一个存根,并返回一个带有存根的connect和release方法的假客户机:
// test.js
let fakeClient = {
connect() => { do something or stub this method },
release() => { do something or stub this method }
};
before() => {
sinon.stub(db, 'getPgClient').callsFake(() => Promise.resolve(fakeClient));
});注释:-我返回一个履行承诺的存根getPgClient函数,因为原始函数也返回一个承诺。
https://stackoverflow.com/questions/46124200
复制相似问题