Trying to write a test for webpack 4 plugin, using webpack node.js API, but 1 console message haunts me. Here is a simple code for my test using jest:
webpack4.test.ts:
import path from 'path';
import webpack from 'webpack';
describe('webpack', () => {
test('should pass with simplest config', (done) => {
const compiler = webpack({
mode: 'none',
entry: path.resolve(__dirname, 'entry.ts'),
});
compiler.run((err, stats) => {
if (err) {
throw new Error(err.message);
}
expect(2).toBe(2);
done();
});
});
});
entry.ts:
const b = 1;
If I run this code using jest in console, it passes, bundle file is created, but a warning message is shown:
A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks.
If I run jest --detectOpenHandles, another message is shown.
Jest has detected the following 1 open handle potentially keeping Jest from exiting:
● Timeout
12 | if (err) {
13 | throw new Error(err.message);
> 14 | }
| ^
15 |
16 | expect(2).toBe(2);
17 | done();
at go$readFile (node_modules/graceful-fs/graceful-fs.js:118:14)
at Object.readFile (node_modules/graceful-fs/graceful-fs.js:115:12)
at Storage.provide (node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:90:3)
at CachedInputFileSystem.readFile (node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:269:25)
at CachedInputFileSystem._readJson (node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:223:10)
at Storage.provide (node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:90:3)
at CachedInputFileSystem.readJson (node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:273:25)
at node_modules/enhanced-resolve/lib/DescriptionFileUtils.js:22:26
at forEachBail (node_modules/enhanced-resolve/lib/forEachBail.js:14:3)
at findDescriptionFile (node_modules/enhanced-resolve/lib/DescriptionFileUtils.js:17:3)
at Object.loadDescriptionFile (node_modules/enhanced-resolve/lib/DescriptionFileUtils.js:74:4)
at node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js:24:27
at AsyncSeriesBailHook.eval [as callAsync] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:22:1)
at AsyncSeriesBailHook.lazyCompileHook (node_modules/tapable/lib/Hook.js:154:20)
at Resolver.doResolve (node_modules/enhanced-resolve/lib/Resolver.js:282:16)
at node_modules/enhanced-resolve/lib/ParsePlugin.js:28:14
at AsyncSeriesBailHook.eval [as callAsync] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:7:1)
at AsyncSeriesBailHook.lazyCompileHook (node_modules/tapable/lib/Hook.js:154:20)
at Resolver.doResolve (node_modules/enhanced-resolve/lib/Resolver.js:282:16)
at node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js:36:14
at AsyncSeriesBailHook.eval [as callAsync] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:7:1)
at AsyncSeriesBailHook.lazyCompileHook (node_modules/tapable/lib/Hook.js:154:20)
at Resolver.doResolve (node_modules/enhanced-resolve/lib/Resolver.js:282:16)
at Resolver.resolve (node_modules/enhanced-resolve/lib/Resolver.js:170:15)
at Array.<anonymous> (node_modules/webpack/lib/NormalModuleFactory.js:208:22)
at arrayEachFunc (node_modules/neo-async/async.js:2517:19)
at Object.parallel (node_modules/neo-async/async.js:6858:9)
at node_modules/webpack/lib/NormalModuleFactory.js:191:13
at node_modules/webpack/lib/NormalModuleFactory.js:129:4
at node_modules/webpack/lib/NormalModuleFactory.js:400:5
at AsyncSeriesWaterfallHook.eval [as callAsync] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesWaterfallHook.lazyCompileHook (node_modules/tapable/lib/Hook.js:154:20)
at NormalModuleFactory.create (node_modules/webpack/lib/NormalModuleFactory.js:381:28)
at node_modules/webpack/lib/Compilation.js:1063:18
at Semaphore.acquire (node_modules/webpack/lib/util/Semaphore.js:29:4)
at Compilation._addModuleChain (node_modules/webpack/lib/Compilation.js:1062:18)
at Compilation.addEntry (node_modules/webpack/lib/Compilation.js:1164:8)
at node_modules/webpack/lib/SingleEntryPlugin.js:46:17
at AsyncParallelHook.eval [as callAsync] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:7:1)
at AsyncParallelHook.lazyCompileHook (node_modules/tapable/lib/Hook.js:154:20)
at node_modules/webpack/lib/Compiler.js:669:20
at AsyncSeriesHook.eval [as callAsync] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (node_modules/tapable/lib/Hook.js:154:20)
at Compiler.compile (node_modules/webpack/lib/Compiler.js:662:28)
at node_modules/webpack/lib/Compiler.js:321:11
at Compiler.readRecords (node_modules/webpack/lib/Compiler.js:529:11)
at node_modules/webpack/lib/Compiler.js:318:10
at AsyncSeriesHook.eval [as callAsync] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (node_modules/tapable/lib/Hook.js:154:20)
at node_modules/webpack/lib/Compiler.js:315:19
at AsyncSeriesHook.eval [as callAsync] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:15:1)
at AsyncSeriesHook.lazyCompileHook (node_modules/tapable/lib/Hook.js:154:20)
at Compiler.run (node_modules/webpack/lib/Compiler.js:312:24)
at Object.<anonymous> (test/plugins/webpack4.test.ts:14:18)
Looks like I am missing something but I have no ideas, what is the reason if this message, need your help. Thank you!
After ton of experiments I found an easy decision, which helps me (500ms wasn`t enough for my environment):
afterAll(async () => {
// avoid jest open handle error
await new Promise(resolve => setTimeout(() => resolve(''), 1000));
});