节点/ Sinon – 库或模块中的存根function(node-postgres)
我试图testing一个函数,查询数据库使用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(); } };
通常情况下,我会存根这样的function(db.saveUser这里是一个假function,但它确实得到了正确的桩):
var stub = sinon.stub(db, 'saveUser').callsFake(() => { return 'Saved from stub' });
然而,这不是在pg模块上工作,我试图存储构造函数,Pool,.connect,.release甚至整个模块,但似乎没有任何工作原因。
PS:我试着改变所有variables的const到var,因为我认为这是原因,相同的结果。 我也尝试了在存根中的承诺,在几个方面,没有改变。
创build一个新的函数,返回一个pg客户端,并在query
函数中使用它:
// db.js
exports.getPgClient = () => { return pool.connect(); }; exports.query = async (query) => { const client = await exports.getPgClient(); ... };
在您的testing中,为getPgClient
函数创build一个存根,并返回带有存根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
函数中返回满足的promise,因为原函数也返回一个Promise。
- 使用SET和NOW()将node.js插入到mySQL Db
- 每10秒钟通过socket.io发送数据
- Ajax Express NodeJS在页面的一部分加载ejs模板
- 在服务器端可以用NGINX使用Webpack-Hot-Middleware吗?
- 为什么我的ES6(使用Babel)类说`this`在实例方法中是未定义的?
- NPM:在OS X El Capitan上找不到“ld:library for -lgcc_s.10.5”?
- Bot在本地工作,但对Bot服务没有反应
- meteor将不会启动 – 纤维/ futures.js抛出错误“错误:SQLITE_CORRUPT:数据库磁盘映像格式错误”
- 奇怪的打字稿错误:“名称g不存在于当前范围”