“错误:尝试对未定义的属性'collection'进行存根”

时间:2019-08-03 21:45:16

标签: node.js mongodb express sinon sinon-chai

我的控制器

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)的发现进行了存根。

0 个答案:

没有答案