From 2fe6b2ae981a018b66d8473391f63eb51cd50790 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Mon, 23 Dec 2024 09:23:25 +0100 Subject: [PATCH] test: deflake test-watch-file-shared-dependency Delay dependency file modification on macOS. Refs: https://github.com/nodejs/node/pull/51842 --- .../test-watch-file-shared-dependency.mjs | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-watch-file-shared-dependency.mjs b/test/parallel/test-watch-file-shared-dependency.mjs index 37ac647f82310e..3889bc4d074865 100644 --- a/test/parallel/test-watch-file-shared-dependency.mjs +++ b/test/parallel/test-watch-file-shared-dependency.mjs @@ -12,8 +12,6 @@ if (common.isIBMi) if (common.isAIX) common.skip('folder watch capability is limited in AIX.'); -tmpdir.refresh(); - const { FilesWatcher } = watcher; tmpdir.refresh(); @@ -32,15 +30,18 @@ Object.entries(fixtureContent) .forEach(([file, content]) => writeFileSync(fixturePaths[file], content)); describe('watch file with shared dependency', () => { - it('should not remove shared dependencies when unfiltering an owner', () => { + it('should not remove shared dependencies when unfiltering an owner', (t, done) => { const controller = new AbortController(); - const watcher = new FilesWatcher({ signal: controller.signal, debounce: 200 }); + const watcher = new FilesWatcher({ signal: controller.signal }); watcher.on('changed', ({ owners }) => { - assert.strictEqual(owners.size, 2); + if (owners.size !== 2) return; + + // If this code is never reached the test times out. assert.ok(owners.has(fixturePaths['test.js'])); assert.ok(owners.has(fixturePaths['test-2.js'])); controller.abort(); + done(); }); watcher.filterFile(fixturePaths['test.js']); watcher.filterFile(fixturePaths['test-2.js']); @@ -49,6 +50,20 @@ describe('watch file with shared dependency', () => { watcher.unfilterFilesOwnedBy([fixturePaths['test.js']]); watcher.filterFile(fixturePaths['test.js']); watcher.filterFile(fixturePaths['dependency.js'], fixturePaths['test.js']); - writeFileSync(fixturePaths['dependency.js'], 'module.exports = { modified: true };'); + + if (common.isMacOS) { + // Do the write with a delay to ensure that the OS is ready to notify us. + setTimeout(() => { + writeFileSync( + fixturePaths['dependency.js'], + 'module.exports = { modified: true };' + ); + }, common.platformTimeout(200)); + } else { + writeFileSync( + fixturePaths['dependency.js'], + 'module.exports = { modified: true };' + ); + } }); });