我正在使用连接到Postgres数据库的mocha,nodejs和pg-promise。我想知道如何对执行DML的函数进行单元测试?这只是一个简单的例子:
export function insertUser(db, { firstName, lastName }) {
db.one(`
INSERT INTO users
(
firstName,
lastName
)
VALUES
(
$<firstName>,
$<lastName>
)
`, { firstName, lastName });
}
如果查询中有拼写错误,单位测试如何捕获它?我可以创建一个测试数据库,动态创建临时表,但这会导致我的测试速度变慢。
答案 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);
});
});
});
那应该让你站稳脚跟。