gpt4 book ai didi

javascript - 测试微服务功能时模拟数据库

转载 作者:行者123 更新时间:2023-11-29 14:17:08 25 4
gpt4 key购买 nike

我已经使用 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 等函数)来检索或创建数据。

最佳答案

根据一般经验,您有两个选择:

  1. 使用依赖注入(inject)并发送模拟数据库服务
  2. 将测试环境配置为使用测试数据库,以便您可以按原样使用数据库。

这两个都是可能有用的测试。第一个选项更多的是单元测试,并要求您重构代码以使用依赖注入(inject)。然后,您的测试代码将注入(inject)某种模拟对象,该对象与您的实际数据库对象具有相同的 API。如果您是这类事情的新手,谷歌将是您的 friend :单元测试和控制反转在概念上相当简单,但可能有很多细节需要深究。

由于您还没有设置依赖注入(inject),接下来您可以配置您的测试环境以使用某种测试数据库。这将使它更像是一个集成测试。您可以通过为您的测试设置不同的数据库来做到这一点,然后您将(仍然)必须重构您的代码以根据您的环境调整您的数据库连接凭据。同样,它在概念上很简单,但可能会迷失很多细节。

如果您不熟悉代码测试,花一些时间阅读它并真正理解它的工作原理是值得的。阅读有关控制反转和单元测试的主题。正确的代码测试几乎对任何代码库都有巨大的好处,但您确实必须从一开始就为此做好计划,因为正确的控制反转(这是正确的代码测试所必需的)确实需要以不同的方式组织您的代码。

编辑以添加一些细节:

一旦您计划并执行代码测试,它就会变得非常容易,但开始并不是一项小任务。最重要的问题是您的代码必须以实际计划 future 代码测试的方式编写。在您的情况下,这意味着要么重构您的代码以使用实际的依赖注入(inject)(node.js 支持),要么至少根据环境调整您的数据库连接。后者会更容易做到,但它只允许进行有限的测试。最后,如果您想进行适当的代码测试,您将不得不重构依赖注入(inject)/控制反转。

完成后,下一步就是选择测试框架。我不知道 node.js 的默认值是什么,但大多数语言/框架都有一个相当标准的,应该不难找到。可能会有不止一种选择,因此您可能会花一些时间选择最适合您风格的一种。一旦选择了测试框架,您就必须仔细阅读它的工作原理、设置方法以及使用方法。

完成这些工作后,您就可以真正开始测试了。第一次做需要做很多工作,但 100% 值得付出努力。

关于javascript - 测试微服务功能时模拟数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44199201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com