如何用jest模拟pg-promise库

时间:2017-11-23 13:39:33

标签: unit-testing promise pg-promise

我正在尝试模拟pg promise库。我希望能够模拟回报是否承诺拒绝或解决。这是一个示例函数和测试:

const pgp = require('pg-promise')({});

const someFunc = callback => {
  const db = pgp('connectionString');
  db
    .none('create database test;')
    .then(() => {
      callback(null, 'success');
    })
    .catch(err => {
      callback(err);
    });
};

module.exports = {
  someFunc
};

我想这样测试它:

const { someFunc } = require('./temp');
let pgp = require('pg-promise')({
  noLocking: true
});
// HOW TO MOCK?

describe('test', () => {
  beforeEach(() => {
    jest.resetModules();
    jest.resetAllMocks();
  });
  it('should test', () => {
    let db = pgp('connectionString');
    // how to mock this?

    db.none = jest.fn();
    db.none.mockReturnValue(Promise.reject('mock'));
    const callback = jest.fn();
    someFunc(callback);
    return new Promise(resolve => setImmediate(resolve)).then(() => {
      expect(callback.mock.calls.length).toEqual(1);
    });
  });
});

2 个答案:

答案 0 :(得分:0)

您可以像这样愚蠢的模拟来模拟AbstractErrorController 对象:

pgp

答案 1 :(得分:0)

这是一个老问题,但这是一个新答案:

您可以看看pg-mem,这是我最近发布的一个库,它模仿内存中的postgres实例。

它支持大多数常见的SQL查询(但在语法不太频繁时会失败-如果遇到这种情况,则会提出问题)。

我写了一篇有关here的文章

有关您的用例,请参见this section