Javascript 测试微服务功能时模拟数据库
我已经用pg promise创建了一个基本的NodeJS微服务。我已经通过express创建了包含API的路由文件(index.js):Javascript 测试微服务功能时模拟数据库,javascript,node.js,database,postgresql,pg-promise,Javascript,Node.js,Database,Postgresql,Pg Promise,我已经用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.createP
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;
然后,我在querys.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和类似于Beforeach的函数)来检索或创建数据。一般来说,您有两个选择:
一旦你完成了这些事情,你就可以真正开始测试了。第一次做这件事需要做很多工作,但100%的努力是值得的。一般来说,你有两个选择:
var options = {
// Use a custom promise library, instead of the default ES6 Promise:
promiseLib: promise,
// Extending the database protocol with our custom repositories:
extend: obj => {
// Do not use 'require()' here, because this event occurs for every task
// and transaction being executed, which should be as fast as possible.
obj.users = repos.users(obj, pgp);
obj.products = repos.products(obj, pgp);
// Alternatively, you can set all repositories in a loop:
//
// for (var r in repos) {
// obj[r] = repos[r](obj, pgp);
// }
}
};