node/test/parallel/test-fs-watch-recursive.js
Santiago Gimeno a133b775e3 test: fix fs-watch-recursive flakiness on OS X
The test is sometimes timing out because of a race condition between
the fs event generated on file creation and the event being registered
in the kqueue. To avoid this problem, create the file after 100 ms,
that is the value used in the `fs_event_watch_dir_recursive` libuv test.

PR-URL: https://github.com/nodejs/node/pull/4629
Reviewed-By: Rich Trott <rtrott@gmail.com>
2016-09-01 19:27:50 +02:00

48 lines
1.1 KiB
JavaScript

'use strict';
const common = require('../common');
if (!(common.isOSX || common.isWindows)) {
common.skip('recursive option is darwin/windows specific');
return;
}
const assert = require('assert');
const path = require('path');
const fs = require('fs');
const testDir = common.tmpDir;
const filenameOne = 'watch.txt';
common.refreshTmpDir();
const testsubdir = fs.mkdtempSync(testDir + path.sep);
const relativePathOne = path.join(path.basename(testsubdir), filenameOne);
const filepathOne = path.join(testsubdir, filenameOne);
const watcher = fs.watch(testDir, {recursive: true});
var watcherClosed = false;
watcher.on('change', function(event, filename) {
assert.ok('change' === event || 'rename' === event);
// Ignore stale events generated by mkdir and other tests
if (filename !== relativePathOne)
return;
watcher.close();
watcherClosed = true;
});
if (process.platform === 'darwin') {
setTimeout(function() {
fs.writeFileSync(filepathOne, 'world');
}, 100);
} else {
fs.writeFileSync(filepathOne, 'world');
}
process.on('exit', function() {
assert(watcherClosed, 'watcher Object was not closed');
});