diff --git a/lib/helper/FileSystem.js b/lib/helper/FileSystem.js index 1f71863ea..b31972f6d 100644 --- a/lib/helper/FileSystem.js +++ b/lib/helper/FileSystem.js @@ -84,12 +84,13 @@ class FileSystem extends Helper { */ async waitForFile(name, sec = 1) { if (sec === 0) assert.fail('Use `seeFile` instead of waiting 0 seconds!') - const waitTimeout = sec * 1000 this.file = path.join(this.dir, name) this.debugSection('File', this.file) - return isFileExists(this.file, waitTimeout).catch(() => { - throw new Error(`file (${name}) still not present in directory ${this.dir} after ${waitTimeout / 1000} sec`) - }) + const endTime = Date.now() + sec * 1000 + while (!fileExists(this.file)) { + if (endTime < Date.now()) throw new Error(`file (${name}) still not present in directory ${this.dir} after ${sec} sec`) + await new Promise(resolve => setTimeout(resolve, 200)) + } } /** @@ -192,36 +193,3 @@ function getFileContents(file, encoding = 'utf8') { if (encoding === '') assert.fail('Encoding is an empty string, please set a valid encoding') return fs.readFileSync(file, encoding) } - -/** - * @param {string} file - * @param {number} timeout - * @private - * @returns {Promise} - */ -function isFileExists(file, timeout) { - return new Promise((resolve, reject) => { - const timer = setTimeout(() => { - watcher.close() - reject(new Error('File did not exists and was not created during the timeout.')) - }, timeout) - - const dir = path.dirname(file) - const basename = path.basename(file) - const watcher = fs.watch(dir, (eventType, filename) => { - if (eventType === 'rename' && filename === basename) { - clearTimeout(timer) - watcher.close() - resolve() - } - }) - - fs.access(file, fs.constants.R_OK, err => { - if (!err) { - clearTimeout(timer) - watcher.close() - resolve() - } - }) - }) -}