首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库或模块中的节点/ Sinon函数(节点-postgres)

库或模块中的节点/ Sinon函数(节点-postgres)
EN

Stack Overflow用户
提问于 2017-09-08 20:37:17
回答 1查看 1.3K关注 0票数 2

我正在尝试测试一个使用pg模块查询数据库的函数,下面是我如何使用它:

代码语言:javascript
复制
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在这里是一个假函数,但它确实会被正确地短截):

代码语言:javascript
复制
var stub = sinon.stub(db, 'saveUser').callsFake(() => { return 'Saved from stub' });

然而,这并不适用于pg模块,我尝试过在构造函数、池、.connect、.release甚至整个模块中顽固使用,但由于某种原因,似乎没有任何东西能工作。

PS: --我也尝试过在所有变量上更改const为var,因为我认为这是原因,结果是相同的。我也尝试了承诺在存根,在几个方面,没有改变。

EN

回答 1

Stack Overflow用户

发布于 2017-09-08 21:07:41

创建一个返回pg客户端的新函数,并在query函数中使用它:

// db.js

代码语言:javascript
复制
exports.getPgClient = () => {
  return pool.connect();
};

exports.query = async (query) => {
  const client = await exports.getPgClient();
  ...
};

在您的测试中,为getPgClient函数创建一个存根,并返回一个带有存根的connectrelease方法的假客户机:

// test.js

代码语言:javascript
复制
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函数,因为原始函数也返回一个承诺。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46124200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档