Ash*_*row 16 unit-testing mongoose mongodb node.js jasmine
我是Node.js,Mongoose的新手,并且在这个环境中进行测试.我在单独的文件中声明了以下架构.
Issue = mongoose.model("Issue", {
identifier: String,
date: String,
url: String,
name: String,
thumbnailURL: String
});
Run Code Online (Sandbox Code Playgroud)
然后我有这个方法,只返回IssueMongoDB集合中的所有实例.
function issues(request, response) {
response.setHeader('Content-Type', 'text/json');
Issue.find().sort('date').exec(function(error, items) {
if (error) {
response.send(403, {"status": "error", "error:": exception});
}
else {
response.send(200, {"issues": items});
}
});
}
Run Code Online (Sandbox Code Playgroud)
我已经通过实验得到了这一点,现在我想测试它,但我遇到了一个问题.如何在不设置MongoDB连接的情况下进行测试,我知道我可以设置所有这些内容,但这是一个集成测试.我想编写单元测试来测试以下内容:
date字段排序我很想知道如何重构我现有的代码以使其更具单元可测试性.我尝试过创建第二个被调用的函数,接受response和Item架构对象作为参数,但感觉不对.有谁有更好的建议?
Mongoose model(您的Issue)返回该Query对象的新实例.新query实例可以exec通过访问该方法prototype.(猫鼬3.8~)
如果要返回错误,可以写:
sinon.stub(mongoose.Query.prototype, "exec").yields({ name: "MongoError" }, null);
Run Code Online (Sandbox Code Playgroud)
在我的节点代码中使用mocha和chaijs和sinonjs这样的方法对我有用:
var should = require('chai').should(),
sinon = require('sinon'),
mongoose = require('mongoose');
it('#issues() handles mongoosejs errors with 403 response code and a JSON error message', function (done) {
// mock request
var request = {};
// mock response
var response = {};
response.setHeader = function(header) {};
response.send = function (responseCode, jsonObject) {
responseCode.should.equal(403);
jsonObject.stats.should.equal('error');
// add a test for "error:": exception
done();
}
var mockFind = {
sort: function(sortOrder) {
return this;
},
exec: function (callback) {
callback('Error');
}
}
// stub the mongoose find() and return mock find
mongoose.Model.find = sinon.stub().returns(mockFind);
// run function
issues(request, response);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9015 次 |
| 最近记录: |