Skip to content

Problems with mo(ck/ng)oose and testing #175

@Martinsos

Description

@Martinsos

Hi,
thanks for this generator!
I have been using it for some time now, and I just encountered certain problems with testing and mockgoose.
The version of the generator is about 9 months old, I have mockgoose version 6.0.8 and mongoose 4.13.12.
I have not been using tests at all for some time and decided to start using them now. I updated all of them, they are all passing, but, I am getting a lot of errors from mongo, like this:

Ran all test suites matching /src\/services\/aws\/index.test.js/i.
  console.warn node_modules/bluebird/js/release/debuggability.js:873
    Unhandled rejection MongoError: topology was destroyed
        at createIndex (/home/XXX/api-server/node_modules/mongodb/lib/db.js:1071:76)
        at Db.Object.<anonymous>.Db.createIndex (/home/XXX/api-server/node_modules/mongodb/lib/db.js:1049:44)
        at /home/XXX/api-server/node_modules/mongodb/lib/db.js:1161:12
        at handleCallback (/home/XXX/api-server/node_modules/mongodb/lib/utils.js:120:56)
        at /home/XXX/api-server/node_modules/mongodb/lib/db.js:1586:5
        at handleCallback (/home/XXX/api-server/node_modules/mongodb/lib/utils.js:120:56)
        at /home/XXX/node_modules/mongodb/lib/cursor.js:861:16
        at handleCallback (/home/XXX/api-server/node_modules/mongodb-core/lib/cursor.js:171:5)
        at setCursorDeadAndNotified (/home/XXX/api-server/node_modules/mongodb-core/lib/cursor.js:505:3)
        at nextFunction (/home/XXX/api-server/node_modules/mongodb-core/lib/cursor.js:660:7)
        at CommandCursor.Object.<anonymous>.Cursor.next [as _next] (/home/XXX/api-server/node_modules/mongodb-core/lib/cursor.js:701:3)
        at fetchDocs (/home/XXX/api-server/node_modules/mongodb/lib/cursor.js:857:10)
        at /home/XXX/api-server/node_modules/mongodb/lib/cursor.js:880:7
        at handleCallback (/home/XXX/api-server/node_modules/mongodb-core/lib/cursor.js:171:5)
        at nextFunction (/home/XXX/api-server/node_modules/mongodb-core/lib/cursor.js:691:5)
        at /home/XXX/api-server/node_modules/mongodb-core/lib/cursor.js:602:7
        at queryCallback (/home/XXX/api-server/node_modules/mongodb-core/lib/cursor.js:232:18)
        at /home/XXX/api-server/node_modules/mongodb-core/lib/connection/pool.js:469:18
        at process._tickCallback (internal/process/next_tick.js:112:11)

About topology being destroyed and

  console.error node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:176
    Mongoose: users.ensureIndex({ name: 1 }, { background: true })

  console.error node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:176
    Mongoose: users.insert({ XXX })

  console.error node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:176
    Mongoose: users.remove()

  console.error node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:176
    Mongoose: users.ensureIndex({ surname: 1 }, { background: true })

they are all appearing at the same time.

My setup.js looks like this:

import { EventEmitter } from 'events'
import mockgoose from 'mockgoose'
import mongoose from '../src/services/mongoose'
import { mongo } from '../src/config'

EventEmitter.defaultMaxListeners = Infinity
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000

global.Array = Array
global.Date = Date
global.Function = Function
global.Math = Math
global.Number = Number
global.Object = Object
global.RegExp = RegExp
global.String = String
global.Uint8Array = Uint8Array
global.WeakMap = WeakMap
global.Set = Set
global.Error = Error
global.TypeError = TypeError
global.parseInt = parseInt
global.parseFloat = parseFloat

beforeAll(async () => {
  await mockgoose(mongoose)
  mongoose.connect(mongo.uri)
})

afterAll(() => {
  mongoose.disconnect()
})

afterEach(async () => {
  const { collections } = mongoose.connection
  const promises = []
  Object.keys(collections).forEach((collection) => {
    promises.push(collections[collection].remove())
  })
  await Promise.all(promises)
})

which is basically as it was when generated.

/src/services/mongoose.js looks like this:

import Promise from 'bluebird'
import mongoose from 'mongoose'
import { mongo } from '../../config'

Object.keys(mongo.options).forEach((key) => {
  mongoose.set(key, mongo.options[key])
})

mongoose.Promise = Promise
/* istanbul ignore next */
mongoose.Types.ObjectId.prototype.view = function () {
  return { id: this.toString() }
}

/* istanbul ignore next */
mongoose.connection.on('error', (err) => {
  console.error('MongoDB connection error: ' + err)
  process.exit(-1)
})

export default mongoose

I have not changed it at all.

I am having hard time figuring out where to start from in order to fix this, so any help is very welcome! Thanks a lot.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions