【发布时间】:2017-10-27 04:58:53
【问题描述】:
我用 pg-promise 创建了一个基本的 NodeJS 微服务。我已经通过 express 创建了包含 API 的路由文件 (index.js):
var express = require('express');
var router = express.Router();
var db = require('./../queries');
router.get('/api/puppy', db.getAllPuppies);
router.post('/api/puppy', db.createPuppy);
module.exports = router;
然后我在 queries.js 文件中添加了这两个函数:
var promise = require('bluebird');
var options = {
promiseLib: promise
};
var config = require('./config.json');
var pgp = require('pg-promise')(options);
var connectionString = process.env.DB_PATH || "postgres://postgres:xxxx@localhost:5432/postgres";
var db = pgp(connectionString);
function getAllPuppies(req, res, next) {
db.any('select * from puppy')
.then(function (data) {
res.status(200)
.json({
status: 'success',
data: data,
});
})
.catch(function (err) {
return next(err);
});
}
function createPuppy(req, res, next) {
db.none('insert into ' +
'puppy(name, description) ' +
'values(${name}, ${description})',
req.body)
.then(function () {
res.status(200)
.json({
status: 'success',
});
})
.catch(function (err) {
return next(err);
});
}
module.exports = {
getAllPuppies,
createPuppy,
};
该应用程序运行良好。我现在想以一种或另一种方式测试这两个函数,但我有点卡在应该模拟数据库的方式(我正在使用 Mocha 和诸如 beforeEach 之类的函数)来检索或创建数据。
【问题讨论】:
-
感谢 Vitaly,在示例中,查询是经过测试的,但不是实际功能。
-
哦,写得很好的教程中有很多:blog.jscrambler.com/testing-apis-mocha-2
-
嗨 Vitaly,非常感谢。我已经尝试过本教程,但这使用了 lowdb 和 json 文件。我尝试使用这些示例并根据我的目的对其进行修改,但无济于事,我非常沮丧。
-
数据库与API测试完全无关。您只是在测试请求 + 响应,而不是处理程序中的内容。
标签: javascript node.js database postgresql pg-promise