更新这可能是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.js
和test/
,并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全局变量。