gpt4 book ai didi

javascript - 使用 Supertest 和模拟数据库进行 Express JS 集成测试

转载 作者:数据小太阳 更新时间:2023-10-29 04:11:43 25 4
gpt4 key购买 nike

是否可以使用 supertest 测试 Express JS REST API,但用模拟数据库对象替换实际的数据库连接?我有涵盖数据库模型和应用程序其他部分的单元测试以及建立实际数据库连接的 API 端点的功能测试,但我有一个奇怪的要求来创建类似于功能测试但使用模拟数据库连接的集成测试。下面是一个示例端点 Controller :

  var model = require('../../../lib/models/list');

module.exports = {
index: function(req, res) {
var data = { key: 'domains', table: 'demo.events'};

var dataModel = new model(data);

dataModel.query().then(function(results) {
res.respond({data: results}, 200);
}).fail(function(err) {
console.log(err);
res.respond({message: 'there was an error retrieving data'}, 500);
});
}
};

URI 的索引是

var express = require('express'), app, exports;
app = exports = module.exports = express();

exports.callbacks = require('./controller');

app.get('/', exports.callbacks.index);

Controller 中使用的列表模型连接到数据库并检索输出的数据。挑战在于模拟实际的数据库调用,同时仍然使用 supertest 发出请求并从 URI 检索数据

任何信息都会有所帮助,包括您是否认为这是一个糟糕或毫无意义的想法

最佳答案

我用两种方法取得了有限的成功:

1) 使用 rewire将数据库驱动程序库(如 mongodb)替换为模拟库,也许使用 sinon 的 spy / stub /模拟功能

2) 通过 app.set('mongodb', connectedDb) 为开发/生产将您的数据库设置为应用程序设置,但在测试环境中设置一个模拟数据库.这需要您的数据库访问代码(通常是模型)从应用程序获取数据库,或者以其他方式模拟友好或使用依赖注入(inject)模式设计。

这些都不能使一切变得干净和无痛,但我从中得到了一些实用性。

关于javascript - 使用 Supertest 和模拟数据库进行 Express JS 集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437347/

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