gpt4 book ai didi

javascript - 使用 mongoose 在 node.js 上进行单元测试的结构

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

几个月来我一直在使用 node.js 进行开发,但现在我开始了一个新项目,我想知道如何构建应用程序。

当谈到单元测试时,我的问题就来了。我将使用 nodeunit 编写单元测试。

我还使用 express 来定义我的 REST 路由。

我正在考虑在两个“单独的”文件中编写访问数据库的代码(显然,它们会更多,但我只是想简化代码)。会有路由代码。

var mongoose = require('mongoose')
, itemsService = require('./../../lib/services/items-service');

// GET '/items'
exports.list = function(req, res) {
itemsService.findAll({
start: req.query.start,
size: req.query.size,
cb: function(offers) {
res.json(offers);
}
});
};

而且,正如我在那里使用的那样,项目服务仅用于访问数据层。我这样做是为了在单元测试中只测试数据访问层。它将是这样的:

var mongoose = require('mongoose')
, Item = require('./../mongoose-models').Item;

exports.findAll = function(options) {
var query = Offer
.find({});
if (options.start && options.size) {
query
.limit(size)
.skip(start)
}
query.exec(function(err, offers) {
if (!err) {
options.cb(offers);
}
})
};

这样我就可以通过单元测试来检查它是否正常工作,并且我可以在任何我想使用的地方使用这段代码。我唯一不确定是否正确完成的是我传递回调函数以使用返回值的方式。

你怎么看?

谢谢!

最佳答案

是的,很容易!您可以使用像 mocha 这样的单元测试模块和 Node 自己的断言或另一个如should .

作为示例模型的测试用例示例:

var ItemService = require('../../lib/services/items-service');
var should = require('should');
var mongoose = require('mongoose');

// We need a database connection
mongoose.connect('mongodb://localhost/project-db-test');

// Now we write specs using the mocha BDD api
describe('ItemService', function() {

describe('#findAll( options )', function() {

it('"args.size" returns the correct length', function( done ) { // Async test, the lone argument is the complete callback
var _size = Math.round(Math.random() * 420));
ItemService.findAll({
size : _size,
cb : function( result ) {
should.exist(result);
result.length.should.equal(_size);
// etc.

done(); // We call async test complete method
}
},
});


it('does something else...', function() {

});

});

});

等等,令人作呕。

然后,当您完成编写测试时 - 假设您已经 $ npm install mocha 了 - 那么您只需运行 $ ./node_modules/.bin/mocha$ mocha 如果你使用了 npm 的 -g 标志。

取决于您想要的直肠/详细程度。我一直被建议并且发现这样做更容易: 首先编写测试,以获得清晰的规范视角。 然后根据测试编写实现,任何额外的见解都是免费的。

关于javascript - 使用 mongoose 在 node.js 上进行单元测试的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14056454/

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