连接到 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);
});
});
});
这应该会让您顺利前进。
我正在使用 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);
});
});
});
这应该会让您顺利前进。