连接到 Postgres 数据库的单元测试函数

Unit Test Functions Connecting to a Postgres DB

我正在使用 mocha、nodejs 和 pg-promise 连接到 Postgres 数据库。我想知道如何对执行 DML 的函数进行单元测试?这只是一个简单的例子:

export function insertUser(db, { firstName, lastName }) {
  db.one(`
    INSERT INTO users
    (
      firstName,
      lastName
    )
    VALUES
    (
      $<firstName>,
      $<lastName>
    )
  `, { firstName, lastName });
}

如果查询中有拼写错误,单元测试如何捕获它?我可以创建一个测试数据库,即时创建临时表,但这会导致我的测试速度变慢。

鉴于 db 变量是函数参数,对此类代码进行单元测试将很简单。

继续安装模拟库。我们在 sinonjs.

方面取得了很好的成功
npm install sinon --save-dev

有了模拟库,您现在可以创建单元测试,大致如下:

const should = require('should'),
      sinon = require('sinon'),
      helper = require('your-db-module');

describe('DB functions', () => {
  describe('insertUser', () => {
    const { insertUser } = helper;

    it('correctly inserts a new user', () => {
      const db = {
        one: sinon.stub()
      };

      insertUser(db, { firstName: 'john', lastName: 'doe' });

      db.one.calledWithExactly('INSERT INTO users(firstName, lastName) VALUES($<firstName>, $<lastName>)', { firstName: 'john', lastName: 'doe'}).should.eql(true);
    });
  });
});

这应该会让您顺利前进。