Jest mongo并发错误

时间:2018-04-07 02:42:07

标签: mongodb jestjs

更新这可能是Jest中的错误 - 观看此问题here

我按照Jest docs

中的指示,使用Mongo运行Jest测试

当我在运行多个测试文件时出现此错误:

TypeError: Cannot read property 'getConnectionString' of undefined

      3 | class MongoEnvironment extends NodeEnvironment {
      4 |   async setup () {
    > 5 |     this.global.__MONGO_URI__ = await global.__MONGOD__.getConnectionString()
      6 |     this.global.__MONGO_DB_NAME__ = global.__MONGO_DB_NAME__
      7 |
      8 |     await super.setup()

      at MongoEnvironment.setup (test/mongo-environment.js:5:57)

我可以无误地运行的唯一方法是使用--runInBand--maxWorkers 1选项。

我的测试并不重要 - 我可以在每个文件中执行dummt测试,例如:

test('Yo', () => {

})

因此,我要说我将此内容添加到foo.spec.js目录中的bar.spec.jstest/,并jest test/它会产生错误。

我的开玩笑配置:

module.exports = {
  globalSetup: './test/setup.js',
  globalTeardown: './test/teardown.js',
  testEnvironment: './test/mongo-environment.js',
  setupTestFrameworkScriptFile: './test/bootstrap.js',
  testPathIgnorePatterns: ['/node_modules/', '/config/']
}

设置,拆解和mongo环境与Jest文档中的相同。我的引导程序文件是前/后挂钩:

const { MongoClient } = require('mongodb')

let db

beforeAll(async () => {
  connection = await MongoClient.connect(global.__MONGO_URI__)
  db = await connection.db(global.__MONGO_DB_NAME__)
})

afterAll(async () => {
  await connection.close()
  await db.close()
})

知道发生了什么事吗?

如果我制作了一个booboo,以下是completness的其他文件:

//setup.js
const MongodbMemoryServer = require('mongodb-memory-server')
const MONGO_DB_NAME = 'jest'
const mongod = new MongodbMemoryServer.default({ // eslint-disable-line new-cap
  instance: {
    dbName: MONGO_DB_NAME
  },
  binary: {
    version: '3.2.19'
  }
})

module.exports = function () {
  global.__MONGOD__ = mongod
  global.__MONGO_DB_NAME__ = MONGO_DB_NAME
}


// teardown.js
module.exports = async function () {
  await global.__MONGOD__.stop()
}


//mongo-environment.js
const NodeEnvironment = require('jest-environment-node')

class MongoEnvironment extends NodeEnvironment {
  async setup () {
    this.global.__MONGO_URI__ = await global.__MONGOD__.getConnectionString()
    this.global.__MONGO_DB_NAME__ = global.__MONGO_DB_NAME__

    await super.setup()
  }

  async teardown () {
    await super.teardown()
  }

  runScript (script) {
    return super.runScript(script)
  }
}

module.exports = MongoEnvironment

请注意,错误并非100%一致 - 可能是某种时间问题。

这不仅仅是一个Mongo的事情。如果我在我的MongoEnvironment setup()方法中转储全局变量,我可以看到,当运行多个测试时,缺少一大堆Jest全局变量。

0 个答案:

没有答案