单元测试功能连接到Postgres DB

时间:2017-05-04 03:06:06

标签: node.js mocha pg-promise

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

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

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

1 个答案:

答案 0 :(得分:1)

鉴于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);
    });
  });
});

那应该让你站稳脚跟。