我的控制器
const mongodb = require('mongodb');
const mongoClient = mongodb.MongoClient;
const mongoURL = 'xxx';
var database;
mongoClient.connect(mongoURL, { useNewUrlParser: true }, (err, client) => {
database = client.db();
});
const getNames = (req, res) => {
const nameId= req.params.nameId;
const listOfNames = [];
database
.collection('names')
.find({
'section.fields': {
$elemMatch: { nameId: nameId },
},
})
.toArray((err, result) => {
if (err) {
return res.status(500).json(errors.SERVER_ERROR);
}
for (let i = 0; i < result.length; i++) {
const pageId = result[i]._id;
database.collection('dept).findOne(
{
_id: ObjectId(deptId),
isArchived: false,
},
(err, deptDocument) => {
const deptInfo = {
deptName: pageDocument.name,
};
listOfDepts.push(deptInfo);
if (i === result.length - 1) {
res.send(listOfDepts);
}
}
);
}
});
};
要通过对数据库调用进行存根来对getNames端点进行单元测试,我使用的是chai和Sinon,但没有成功。过去几天,我一直在尝试通过直接使用request直接调用路由而没有成功,现在尝试要求控制器文件并调用getName函数。
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../../app');
const sinon = require('sinon');
const should = chai.should();
const renderCtrl = require('../controllers/render.controller');
before((done) => {
const mockCollection = sinon.mongo.collection({});
mockCollection.find.resolves([{
_id: '5cf80e0a4492dc002aeed0dx'
},
{
_id: '5cf80e0a4492dc002aeed0dy'
},
{
_id: '5cf80e0a4492dc002aeed0dz'
}]);
mockCollection.findOne.resolves({
name: 'Happen',
});
const mockDb = sinon.mongo.db({
pages: mockCollection
});
//sinon.stub(renderCtrl.database.collection, 'find').yields(mockDb.collection.find);
sinon.stub(renderCtrl.database, 'collection').yields(mockDb.collection);
done();
});
describe('Content Rendering Service', () => {
it('should get the dept for the supplied nameId', done => {
const nameId = '5cf80e0a4492dc002aeed0d5';
const req = {
params: {nameId: nameId}
};
const res = {};
renderCtrl.getNames(req,res);
chai.res.should.have.status(200);
});
});
我收到错误“错误:尝试对未定义的属性'collection'进行存根”。我尝试了故障排除和试用,并错误地指出了几种无效的方法。有没有一个示例,那就是使用Sinon或其他一些库成功地对mongoDB(不是mongoose)的发现进行了存根。