'use strict'; require('../common'); const tmpdir = require('../common/tmpdir'); const assert = require('assert'); const fs = require('fs'); const join = require('path').join; const spawn = require('child_process').spawnSync; // Test that invoking node with require, and piping stderr to file, // does not result in exception, // see: https://github.com/nodejs/node/issues/11257 tmpdir.refresh(); const fakeModulePath = join(tmpdir.path, 'batman.js'); const stderrOutputPath = join(tmpdir.path, 'stderr-output.txt'); // We need to redirect stderr to a file to produce #11257 const stream = fs.createWriteStream(stderrOutputPath); // The error described in #11257 only happens when we require a // non-built-in module. fs.writeFileSync(fakeModulePath, '', 'utf8'); stream.on('open', () => { spawn(process.execPath, { input: `require("${fakeModulePath.replace(/\\/g, '/')}")`, stdio: ['pipe', 'pipe', stream] }); const stderr = fs.readFileSync(stderrOutputPath, 'utf8').trim(); assert.strictEqual( stderr, '', `piping stderr to file should not result in exception: ${stderr}` ); stream.end(); fs.unlinkSync(stderrOutputPath); fs.unlinkSync(fakeModulePath); });