diff --git a/lib/internal/vfs/provider.js b/lib/internal/vfs/provider.js index 32c238a23fe510..c84caa89540d83 100644 --- a/lib/internal/vfs/provider.js +++ b/lib/internal/vfs/provider.js @@ -597,9 +597,10 @@ class VirtualProvider { * @param {object} [options] Watch options * @param {number} [options.interval] Polling interval in ms (default: 5007) * @param {boolean} [options.persistent] Whether the watcher should prevent exit + * @param {Function} [listener] Change listener * @throws {ERR_METHOD_NOT_IMPLEMENTED} When not overridden by subclass */ - watchFile(path, options) { + watchFile(path, options, listener) { throw new ERR_METHOD_NOT_IMPLEMENTED('watchFile'); } diff --git a/lib/internal/vfs/providers/real.js b/lib/internal/vfs/providers/real.js index 085485ca8a1a97..e6a04dde8c8e1e 100644 --- a/lib/internal/vfs/providers/real.js +++ b/lib/internal/vfs/providers/real.js @@ -543,9 +543,9 @@ class RealFSProvider extends VirtualProvider { return fs.promises.watch(realPath, options); } - watchFile(vfsPath, options) { + watchFile(vfsPath, options, listener) { const realPath = this.#resolvePath(vfsPath); - return fs.watchFile(realPath, options, () => {}); + return fs.watchFile(realPath, options, listener); } unwatchFile(vfsPath, listener) { diff --git a/test/parallel/test-vfs-real-provider-watch.js b/test/parallel/test-vfs-real-provider-watch.js index f4218fa408ee4d..3beb48537fd59d 100644 --- a/test/parallel/test-vfs-real-provider-watch.js +++ b/test/parallel/test-vfs-real-provider-watch.js @@ -38,3 +38,14 @@ assert.strictEqual(myVfs.provider.supportsWatch, true); myVfs.watchFile('/wf.txt', { persistent: false }, listener); myVfs.unwatchFile('/wf.txt', listener); } + +// watchFile listener fires on change +(async () => { + fs.writeFileSync(path.join(root, 'wf2.txt'), 'a'); + const fired = new Promise((resolve) => { + myVfs.watchFile('/wf2.txt', { interval: 25 }, common.mustCall(resolve)); + }); + fs.writeFileSync(path.join(root, 'wf2.txt'), 'b'); + await fired; + myVfs.unwatchFile('/wf2.txt'); +})().then(common.mustCall());