diff --git a/lib/fs.js b/lib/fs.js index d5dc746e895aa7..39bb3777bf9035 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -1596,8 +1596,7 @@ fs.realpath = function realpath(path, options, callback) { }; -fs.mkdtemp = function(prefix, options, callback_) { - var callback = maybeCallback(callback_); +fs.mkdtemp = function(prefix, options, callback) { if (!prefix || typeof prefix !== 'string') throw new TypeError('filename prefix is required'); @@ -1611,6 +1610,7 @@ fs.mkdtemp = function(prefix, options, callback_) { if (typeof options !== 'object') throw new TypeError('"options" must be a string or an object'); + callback = makeCallback(callback); if (!nullCheck(prefix, callback)) { return; } diff --git a/test/parallel/test-fs-mkdtemp.js b/test/parallel/test-fs-mkdtemp.js index d3def97fef1588..dd4ab75c22c7aa 100644 --- a/test/parallel/test-fs-mkdtemp.js +++ b/test/parallel/test-fs-mkdtemp.js @@ -18,12 +18,19 @@ assert.equal(Buffer.byteLength(path.basename(utf8)), Buffer.byteLength('\u0222abc.XXXXXX')); assert(common.fileExists(utf8)); -fs.mkdtemp( - path.join(common.tmpDir, 'bar.'), - common.mustCall(function(err, folder) { - assert.ifError(err); - assert(common.fileExists(folder)); - }) -); +function handler(err, folder) { + assert.ifError(err); + assert(common.fileExists(folder)); + assert.strictEqual(this, null); +} +fs.mkdtemp(path.join(common.tmpDir, 'bar.'), common.mustCall(handler)); + +// Same test as above, but making sure that passing an options object doesn't +// affect the way the callback function is handled. +fs.mkdtemp(path.join(common.tmpDir, 'bar.'), {}, common.mustCall(handler)); + +// Making sure that not passing a callback doesn't crash, as a default function +// is passed internally. assert.doesNotThrow(() => fs.mkdtemp(path.join(common.tmpDir, 'bar-'))); +assert.doesNotThrow(() => fs.mkdtemp(path.join(common.tmpDir, 'bar-'), {}));