codeceptjs / codeceptjs/CodeceptJS

`I.waitForFile` (FileSystem helper) fails if directory does not exist (yet)

Offen
#5,420 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
stale
Vorherrschende Sprache
JavaScript
Sterne
4.2k
Forks
757
Ø Merge
2 T. 9 Std.
Gemergte PRs (30 T.)
16

Beschreibung

`I.waitForFile` sometimes fails and throws weird exceptions if the directory containing the expected file does not exist yet.

Example (all output goes to `${codecept_dir}/output/`):
```js
I.handleDownloads('downloads/example.txt');
I.click('button.download');
I.amInPath('output/downloads');
I.waitForFile('example.txt', 5);
```

If the directory `${codecept_dir}/output/downloads` does not exist yet (it will be created by the browser download at some point in time), the function `I.waitForFile` will throw an exception `ReferenceError: Cannot access 'watcher' before initialization` and the test will fail.

Root cause is in the function [`isFileExists`](https://github.com/codeceptjs/CodeceptJS/blob/3.x/lib/helper/FileSystem.js#L202-L227) of the `FileSystem` helper. The line `const watcher = fs.watch(dir, (eventType, filename) => {...` will throw if `dir` does not exist yet. This exception remains unhandled. Later, the timer for the 5sec timeout detection will try to close the uninitialized `watcher`, leading to the `ReferenceError`.

I will try to create a PR.

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.