Sinon / Node / Express / Mongo – TypeError当试图模拟Mongo DB.collection函数

我正在编写Express / Mongo应用程序的unit testing,并试图用Sinon来模拟Mongo库,这样我就可以在不需要数据库的情况下testing行为。 我正在使用co模块来消费Mongo库对Promise的使用。

下面列出的testing生成下面的错误:

[TypeError: db.collection is not a function] TypeError: db.collection is not a function at /myApp/services/v1/project.js:76:20 at next (native) at onFulfilled (/myApp/node_modules/co/index.js:65:19) 

project.js中的第76行对应于这一行“var col = db.collection('project');”。

如其他地方所build议的,我用Db.prototype嘲笑Db对象。

testProject.js

 describe('Project Services Tests', function() { it('Test Create Project', function(done) { var response = buildResponse(); var request = HttpMocks.createRequest({ params: {'name': UNITTESTPROJECT}, body: { name: UNITTESTPROJECT, program: "Basic Test Data"} }); var MongoMock = Sinon.mock(MongoClient); var DBMock = Sinon.mock(MongoClient.Db.prototype); var CollectionMock = Sinon.mock(MongoClient.Collection.prototype); var countResult = 1; var aResult = {result: {insertedCount: 1}}; MongoMock.expects('connect').resolves(DBMock); DBMock.expects('collection').returns(CollectionMock); CollectionMock.expects('count').resolves(countResult); CollectionMock.expects('insertOne').resolves(aResult); response.on('end', function() { should(response.statusCode).equal(HttpStatus.CREATED); done(); }); project.createProjectByName(request, response); }); 

project.js

 co(function*() { var db = yield MongoClient.connect(dbUrl); var col = db.collection('project'); var count = yield col.count({name: projectName}); if (count > 0) { db.close(); res.status(HttpStatus.FORBIDDEN); res.send('Project ' + projectName + ' already exists. Duplicates not permitted'); } var result = yield col.insertOne(project); db.close(); if (result.insertedCount > 0) { res.status(HttpStatus.CREATED); res.send(req.protocol + '//' + req.hostname + req.originalUrl); } else { res.status(HttpStatus.INTERNAL_SERVER_ERROR); res.send('Project ' + projectName + ' unable to create.'); } }).catch(function(err) { res.status(HttpStatus.INTERNAL_SERVER_ERROR); res.send('Unable to create project' + req.params.name); }); 

的package.json

 "devDependencies": { "mocha": "^3.0.2", "node-mocks-http": "^1.5.2", "should": "^9.0.2", "sinon": "^1.17.5", "sinon-as-promised": "^4.0.2" }, "dependencies": { "body-parser": "^1.15.1", "co": "^4.6.0", "config": "^1.21.0", "express": "^4.14.0", "http-status-codes": "^1.0.6", "log4js": "^0.6.37", "method-override": "^2.3.6", "mongodb": "^2.2.4", "response-time": "^2.3.1", "try": "^0.13.3" }