Hi there,
I'm trying to run a typescript + jest + mongodb-memory-server test environment but I'm getting the following error at teardown:
events.js:189
throw err; // Unhandled 'error' event
^
Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({ MongoNetworkError: read ECONNRESET
at Socket.<anonymous> (C:\Plataforma\Estrutura\Final\node_modules\mongodb\lib\core\connection\connection.js:321:24)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} })
at Connection.emit (events.js:187:17)
at Socket.<anonymous> (C:\Plataforma\Estrutura\Final\node_modules\mongodb\lib\core\connection\connection.js:321:10)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
error Command failed with exit code 1.
Here are my config files:
//jest.config.js
module.exports = {
globalSetup: './setup',
globalTeardown: './teardown.js',
testEnvironment: './mongo-environment.js',
transform: {
'^.+\\.jsx?$': 'babel-jest',
'^.+\\.ts?$': 'ts-jest',
},
roots: ['<rootDir>/test'],
moduleFileExtensions: ['ts', 'js', 'json', 'node'],
preset: 'ts-jest',
};
//setup.js
const path = require('path');
const fs = require('fs');
const MongodbMemoryServer = require('mongodb-memory-server');
const globalConfigPath = path.join(__dirname, 'globalConfig.json');
const mongod = new MongodbMemoryServer.default({
instance: {
dbName: 'StructureGenerator',
debug: true,
},
binary: {
version: '3.2.18',
}
});
module.exports = async function () {
const mongoConfig = {
mongoDBName: 'StructureGenerator',
mongoUri: await mongod.getConnectionString(),
};
// Write global config to disk because all tests run in different contexts.
fs.writeFileSync(globalConfigPath, JSON.stringify(mongoConfig));
console.log('Config is written');
// Set reference to mongod in order to close the server during teardown.
global.MONGOD = mongod;
process.env.MONGO_URL = mongoConfig.mongoUri;
};
//teardown.js
module.exports = async function () {
await global.MONGOD.stop();
};
//mongo-environment.js
const NodeEnvironment = require('jest-environment-node');
const path = require('path');
const fs = require('fs');
const globalConfigPath = path.join(__dirname, 'globalConfig.json');
module.exports = class MongoEnvironment extends NodeEnvironment {
constructor(config) {
super(config);
}
async setup() {
console.log('Setup MongoDB Test Environment');
await super.setup();
const globalConfig = JSON.parse(fs.readFileSync(globalConfigPath, 'utf-8'));
this.global.MONGO_URI = globalConfig.mongoUri;
this.global.MONGO_DB_NAME = globalConfig.mongoDBName;
}
async teardown() {
console.log('Teardown MongoDB Test Environment');
await super.teardown();
}
runScript(script) {
return super.runScript(script);
}
};
I tried to find help on google but I didn't manage to find any similar issues. I'm not sure if the problem is related to this package or some of the other ones, but I'm hoping someone can shed me some light on this issue.
Thanks
We are seeing a similar issue using mocha instead of jest.
I am also facing this error.
Here's my setup: https://github.com/FotonTech/golden-stack/blob/ea876771a4ff76fe44fea1a879d47b70d5b6283e/packages/server/test/helpers.ts#L9-L63
I have also this same error. Turns out it could be an issue on Windows machines only (we tested locally on Windows and OSX). I forked this repo and tried the tests and there are a few tests failing on Windows with the same message:
Test Code with debug log
PS C:\Code\Forks\mongodb-memory-server\packages\mongodb-memory-server-core> yarn test
yarn run v1.15.2
$ npm run lint && npm run tscheck && npm run coverage
> [email protected] tscheck C:\Code\Forks\mongodb-memory-server\packages\mongodb-memory-server-core
> tsc --noEmit
> [email protected] coverage C:\Code\Forks\mongodb-memory-server\packages\mongodb-memory-server-core
> cross-env MONGOMS_DOWNLOAD_DIR=./tmp jest --coverage
PASS src/util/__tests__/resolve-config-test.ts
PASS src/util/__tests__/MongoBinaryDownloadUrl-test.ts (5.855s)
● Console
console.warn src/util/MongoBinaryDownloadUrl.ts:7996
Unknown linux distro Gentoo Linux, falling back to legacy MongoDB build
PASS src/util/__tests__/MongoBinary-test.ts (5.978s)
PASS src/util/__tests__/MongoBinaryDownload-test.ts (7.11s)
PASS src/__tests__/MongoMemoryServer-test.ts (65.847s)
PASS src/__tests__/singleDB-test.ts (60.033s)
● Console
console.error ../../node_modules/jest-jasmine2/build/jasmine/Env.js:289
Unhandled error
console.error ../../node_modules/jest-jasmine2/build/jasmine/Env.js:290
Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({ MongoNetworkError: read ECONNRESET
at Socket.<anonymous> (C:\Code\Forks\mongodb-memory-server\node_modules\mongodb\lib\core\connection\connection.js:325:24)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} })
at Connection.emit (events.js:187:17)
at Socket.<anonymous> (C:\Code\Forks\mongodb-memory-server\node_modules\mongodb\lib\core\connection\connection.js:325:10)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
PASS src/__tests__/multipleDB-test.ts (66.669s)
● Console
console.error ../../node_modules/jest-jasmine2/build/jasmine/Env.js:289
Unhandled error
console.error ../../node_modules/jest-jasmine2/build/jasmine/Env.js:290
Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({ MongoNetworkError: read ECONNRESET
at Socket.<anonymous> (C:\Code\Forks\mongodb-memory-server\node_modules\mongodb\lib\core\connection\connection.js:325:24)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} })
at Connection.emit (events.js:187:17)
at Socket.<anonymous> (C:\Code\Forks\mongodb-memory-server\node_modules\mongodb\lib\core\connection\connection.js:325:10)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
FAIL src/__tests__/replset-test.ts (61.986s)
● multi-member replica set › should enter running state
: Timeout - Async callback was not invoked within the 40000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 40000ms timeout specified by jest.setTimeout.Error:
5 |
6 | describe('multi-member replica set', () => {
> 7 | it('should enter running state', async () => {
| ^
8 | const opts: any = { replSet: { count: 3 } };
9 | const replSet = new MongoMemoryReplSet(opts);
10 | await replSet.waitUntilRunning();
at new Spec (../../node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
at Suite.<anonymous> (src/__tests__/replset-test.ts:7:3)
at Object.<anonymous> (src/__tests__/replset-test.ts:6:1)
● multi-member replica set › should be possible to connect replicaset after waitUntilRunning resolveds
Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({ MongoNetworkError: read ECONNRESET
at Socket.<anonymous> (../../node_modules/mongodb/lib/core/connection/connection.js:325:24)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} })
at Socket.<anonymous> (../../node_modules/mongodb/lib/core/connection/connection.js:325:10)
PASS src/util/__tests__/MongoInstance-test.ts (68.727s)
● Console
console.log src/util/MongoBinary.ts:6736
MongoBinary options: {"downloadDir":"./tmp","platform":"win32","arch":"x64","version":"4.0.3","debug":true}
console.log src/util/MongoBinary.ts:6896
MongoBinary: Mongod binary path: C:\Code\Forks\mongodb-memory-server\packages\mongodb-memory-server-core\tmp\4.0.3\mongod.exe
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: Called MongoInstance._launchKiller(parent: 27800, child: 18164):
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.001+0100 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] MongoDB starting : pid=18164 port=27445 dbpath=C:\Users\JOHAND~1\AppData\Local\Temp\mongo-mem-27800PRBECSrdwgVj 64-bit host=DESKTOP-8IQI084
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] db version v4.0.3
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] git version: 7ea530946fa7880364d88c8d8b6026bbc9ffa48c
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] allocator: tcmalloc
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] modules: none
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] build environment:
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] distmod: 2008plus-ssl
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] distarch: x86_64
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] target_arch: x86_64
2019-12-02T13:42:50.063+0100 I CONTROL [initandlisten] options: { net: { bindIp: "127.0.0.1", port: 27445 }, security: { authorization: "disabled" }, storage: { dbPath: "C:\Users\JOHAND~1\AppData\Local\Temp\mongo-mem-27800PRBECSrdwgVj" } }
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.066+0100 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=7642M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.125+0100 I STORAGE [initandlisten] WiredTiger message [1575290570:125714][18164:140719549993568], txn-recover: Set global recovery timestamp: 0
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.145+0100 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.200+0100 I STORAGE [initandlisten] createCollection: admin.system.version with provided UUID: 794a0d0f-21cf-40f0-aeed-0433fad7902a
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.235+0100 I COMMAND [initandlisten] setting featureCompatibilityVersion to 4.0
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.240+0100 I STORAGE [initandlisten] createCollection: local.startup_log with generated UUID: ca3d0272-7115-47d3-aa37-36fe78b032c5
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.822+0100 W FTDC [initandlisten] Failed to initialize Performance Counters for FTDC: WindowsPdhError: PdhExpandCounterPathW failed with 'The specified object was not found on the computer.' for counter '\Memory\Available Bytes'
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.822+0100 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory 'C:/Users/JOHAND~1/AppData/Local/Temp/mongo-mem-27800PRBECSrdwgVj/diagnostic.data'
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: 2019-12-02T13:42:50.824+0100 I STORAGE [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: 7070d4c4-6655-4113-8f66-0ff59efe01ec
2019-12-02T13:42:50.825+0100 I NETWORK [initandlisten] waiting for connections on port 27445
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: MongodbInstance: is ready!
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: Called MongoInstance.kill():
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: - childProcess: send kill cmd...
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: - childProcess: got exit signal. Ok!
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: CLOSE: null
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: - killerProcess: send kill cmd...
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: [MongoKiller]: exit - [null,"SIGTERM"]
console.log src/util/MongoInstance.ts:7640
Mongo[27445]: - killerProcess: got exit signal. Ok!
FAIL src/__tests__/replset-single-test.ts (69.077s)
● single server replset › should enter running state
Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({ MongoNetworkError: read ECONNRESET
at Socket.<anonymous> (../../node_modules/mongodb/lib/core/connection/connection.js:325:24)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} })
at Socket.<anonymous> (../../node_modules/mongodb/lib/core/connection/connection.js:325:10)
● single server replset › should be able to get connection string to specific db
Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({ MongoNetworkError: read ECONNRESET
at Socket.<anonymous> (../../node_modules/mongodb/lib/core/connection/connection.js:325:24)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} })
at Socket.<anonymous> (../../node_modules/mongodb/lib/core/connection/connection.js:325:10)
@johandavidson could you test again with the latest version? (and clear all caches)
(all): is this still an issue?
Hi all,
I'm experiencing the same issue as others on this thread and, unfortunately, this latest version (with cache cleared) didn't fix it for me. If it's any help, the only time the error occurs is if I use "runInBand"; otherwise, it works perfectly.
Thanks!
events.js:200
throw err; // Unhandled 'error' event
^
Error [ERR_UNHANDLED_ERROR]: Unhandled error. (MongoNetworkError: read ECONNRESET
at Socket.<anonymous> (C:\Users\ibber\Documents\3merge\gentek\server\node_modules\mongodb\lib\core\connection\connection.js:340:24)
at Object.onceWrapper (events.js:297:20)
at Socket.emit (events.js:209:13)
at Socket.EventEmitter.emit (domain.js:476:20)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:77:11) {
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
name: 'MongoNetworkError',
[Symbol(mongoErrorContextSymbol)]: {}
})
at Connection.emit (events.js:198:17)
at Connection.EventEmitter.emit (domain.js:476:20)
at Socket.<anonymous> (C:\Users\ibber\Documents\3merge\gentek\server\node_modules\mongodb\lib\core\connection\connection.js:340:10)
at Object.onceWrapper (events.js:297:20)
at Socket.emit (events.js:209:13)
at Socket.EventEmitter.emit (domain.js:476:20)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:77:11) {
context: MongoNetworkError: read ECONNRESET
at Socket.<anonymous> (C:\Users\ibber\Documents\3merge\gentek\server\node_modules\mongodb\lib\core\connection\connection.js:340:24)
at Object.onceWrapper (events.js:297:20)
at Socket.emit (events.js:209:13)
at Socket.EventEmitter.emit (domain.js:476:20)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:77:11) {
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
name: 'MongoNetworkError',
[Symbol(mongoErrorContextSymbol)]: {}
}
}
@MikeIbberson please provide debug output
and could you provide versions:
and which package used?
and please how you start the tests (like npm run test / yarn run test)
I fix it here by disconnecting Mongoose in every test file and after all tests run:
import Mongoose from 'mongoose';
import app from '../../src/app';
describe('Test', () => {
afterAll(async () => {
await Mongoose.disconnect();
});
...
Full example: https://github.com/DiegoVictor/omnistack-8/blob/master/api/__tests__/integration/developer.test.js
I discovered it after enable the debug option. After the tests has been finished the shell showed there were still opened connections.
Marking Issue as stale, will be closed in 7 days if no more activity is seen
this seems like not all connections have been disconnected before shutting down the mongod instance
closing as not an error with this package