diff --git a/test/async-hooks/test-statwatcher.js b/test/async-hooks/test-statwatcher.js
index 8085ebf51b3b1d..92832a46803bd4 100644
--- a/test/async-hooks/test-statwatcher.js
+++ b/test/async-hooks/test-statwatcher.js
@@ -1,21 +1,29 @@
 'use strict';
 
 const common = require('../common');
-const commonPath = require.resolve('../common');
+const tmpdir = require('../common/tmpdir');
 const assert = require('assert');
 const initHooks = require('./init-hooks');
 const { checkInvocations } = require('./hook-checks');
 const fs = require('fs');
+const path = require('path');
 
 if (!common.isMainThread)
   common.skip('Worker bootstrapping works differently -> different async IDs');
 
+tmpdir.refresh();
+
+const file1 = path.join(tmpdir.path, 'file1');
+const file2 = path.join(tmpdir.path, 'file2');
+fs.writeFileSync(file1, 'foo');
+fs.writeFileSync(file2, 'bar');
+
 const hooks = initHooks();
 hooks.enable();
 
 function onchange() {}
 // install first file watcher
-fs.watchFile(__filename, onchange);
+const w1 = fs.watchFile(file1, { interval: 10 }, onchange);
 
 let as = hooks.activitiesOfTypes('STATWATCHER');
 assert.strictEqual(as.length, 1);
@@ -28,7 +36,7 @@ checkInvocations(statwatcher1, { init: 1 },
                  'watcher1: when started to watch file');
 
 // install second file watcher
-fs.watchFile(commonPath, onchange);
+const w2 = fs.watchFile(file2, { interval: 10 }, onchange);
 as = hooks.activitiesOfTypes('STATWATCHER');
 assert.strictEqual(as.length, 2);
 
@@ -41,19 +49,29 @@ checkInvocations(statwatcher1, { init: 1 },
 checkInvocations(statwatcher2, { init: 1 },
                  'watcher2: when started to watch second file');
 
-// remove first file watcher
-fs.unwatchFile(__filename);
-checkInvocations(statwatcher1, { init: 1, before: 1, after: 1 },
-                 'watcher1: when unwatched first file');
-checkInvocations(statwatcher2, { init: 1 },
-                 'watcher2: when unwatched first file');
+setTimeout(() => fs.writeFileSync(file1, 'foo++'),
+           common.platformTimeout(100));
+w1.once('change', common.mustCall(() => {
+  setImmediate(() => {
+    checkInvocations(statwatcher1, { init: 1, before: 1, after: 1 },
+                     'watcher1: when unwatched first file');
+    checkInvocations(statwatcher2, { init: 1 },
+                     'watcher2: when unwatched first file');
 
-// remove second file watcher
-fs.unwatchFile(commonPath);
-checkInvocations(statwatcher1, { init: 1, before: 1, after: 1 },
-                 'watcher1: when unwatched second file');
-checkInvocations(statwatcher2, { init: 1, before: 1, after: 1 },
-                 'watcher2: when unwatched second file');
+    setTimeout(() => fs.writeFileSync(file2, 'bar++'),
+               common.platformTimeout(100));
+    w2.once('change', common.mustCall(() => {
+      setImmediate(() => {
+        checkInvocations(statwatcher1, { init: 1, before: 1, after: 1 },
+                         'watcher1: when unwatched second file');
+        checkInvocations(statwatcher2, { init: 1, before: 1, after: 1 },
+                         'watcher2: when unwatched second file');
+        fs.unwatchFile(file1);
+        fs.unwatchFile(file2);
+      });
+    }));
+  });
+}));
 
 process.on('exit', onexit);