Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

--watch crashes mocha on startup #2535

Closed
villesau opened this issue Oct 12, 2016 · 8 comments · Fixed by #2538
Closed

--watch crashes mocha on startup #2535

villesau opened this issue Oct 12, 2016 · 8 comments · Fixed by #2538
Labels
type: bug a defect, confirmed by a maintainer

Comments

@villesau
Copy link
Contributor

villesau commented Oct 12, 2016

I'm getting error below when running mocha in watch mode. As you can see, the file it tries to find is not even js file. Apparently the file link which breaks the mocha is somehow broken. It shouldn't break the mocha though. Without --watch, mocha runs just fine. i'm running mocha version 3.1.2 with following command from package.json:
"test-rc": "mocha 'frontend/*/.spec.js' --watch"

The error is following:

Error: ENOENT: no such file or directory, stat '/Users/me/code/my-project/public/index-apitest.php'
at Error (native)
at fs.statSync (fs.js:987:18)
at /Users/me/code/my-project/node_modules/mocha/lib/utils.js:255:11
at Array.forEach (native)
at Object.exports.files (/Users/me/code/my-project/node_modules/mocha/lib/utils.js:253:6)
at /Users/me/code/my-project/node_modules/mocha/lib/utils.js:256:17
at Array.forEach (native)
at Object.exports.files (/Users/me/code/my-project/node_modules/mocha/lib/utils.js:253:6)
at Object. (/Users/me/code/my-project/node_modules/mocha/bin/_mocha:408:26)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3

@villesau
Copy link
Contributor Author

villesau commented Oct 12, 2016

if following would be wrapped to try-catch, things does not break anymore:

https://github.com/mochajs/mocha/blob/master/lib/utils.js#L255

Would it be feasible solution?

@ScottFreeCode
Copy link
Contributor

Simply ignoring errors at that point isn't likely to be correct behavior -- in this case, as far as I can tell that function shouldn't even be getting paths for files that don't exist, so there's almost certainly something else going wrong that should be addressed; more importantly, in general, suppressing errors could hide and/or worsen other problems.

Any idea where Mocha is getting the path public/index-apitest.php from? Do you have a mocha.opts file?

@villesau
Copy link
Contributor Author

villesau commented Oct 13, 2016

no idea. I'm not very familiar with mocha architecture, and not aware where that function is called. Those non-existing files are broken links. We have vagrant system which creates some links, totally non-related to our frontend, and they are broken on host machine where we handle testing the fe. It seems that mocha is going trough every folder in the project, even though it is pointed to look only at the frontend/ folder. Changing non-matching file does not rerun the test suite though. Same behaviour is in the version 2.5.0

@villesau
Copy link
Contributor Author

It also seems that ignoring file system errors is pretty common pattern all over the mocha code base. should they be ignored in the place i pointed out too? At least non-existing(ENOENT) files.

@villesau
Copy link
Contributor Author

villesau commented Oct 13, 2016

I Probably identified the problem (a line which calls the files -function)
https://github.com/mochajs/mocha/blob/master/bin/_mocha#L408

This line should most likely either use variable files, OR lookupFiles function from here: https://github.com/mochajs/mocha/blob/master/bin/_mocha#L364

Maybe someone more familiar with mocha could validate if i'm correct? Both functions (files and lookupFiles) apparently returns a list of file names with a difference that lookupFiles seems more robust.

edit: Apparently solution i found ignores regular .js (not matching the regex/path given as parameter) files from watch which is bad. Thus i think try/catch would be good enough solution.

@ScottFreeCode
Copy link
Contributor

Ah, I misread the files function looking at that first line you pointed out; I thought the line getting the error had been given a list of files, but it's actually part of finding the list of files based on looking at the directory recursively and then grabbing only the ones with the right file extensions. That explains why it was looking at the php file at all. So that definitely needs to be fixed.

I'm not sure I'd describe lookupFiles as more robust -- between the fact that it's trying to handle at least three different usage methods (globbing, non-recursive directory/file specification and recursive directory specification) and the fact that it's basically written to silently ignore just about any error interacting with the filesystem at all, I worry that it's already bugged.

But more practically, it doesn't look like lookupFiles is ignoring node_modules and .git the way files is, so I don't think we can just switch over to that... Maybe in the next backwards-incompatible release we could if we made lookupFiles ignore node_modules and .git like files does, because that would also make it much easier to use globbing while avoiding dependencies' test files (which comes up occassionally). Otherwise or until then, I guess we're just going to have to do something to get files to avoid blowing up from broken symlinks.

I suppose suppressing errors the way lookupFiles is doing would technically do that, although I'm still rather wary of it -- it'd probably make the two parts more consistently reliable or unreliable, but I'm not so sure which... Maybe as a more robust alternative we could rewrite files to use globbing (directly)?

@villesau
Copy link
Contributor Author

villesau commented Oct 14, 2016

i think it would maybe also make sense to just go trough directories & files only once, and then subsetting them as needed (globbing etc). Mochas startup was noticeably faster when i just used same set of files than few lines above, returned by lookupFiles. This also would make files() redundant, but lookupFiles should be splitted into smaller pieces.

My current fix for files() was like this:#2538
This limits the catch only to non-existing files. In future files and lookupFiles should imo use same logic.

@boneskull boneskull added the type: bug a defect, confirmed by a maintainer label Oct 15, 2016
@boneskull
Copy link
Member

@villesau please see my comments in #2538

I'll tag this confirmed, because even though I haven't tried it, it's highly plausible. 😄

jimthedev pushed a commit to commitizen/cz-cli that referenced this issue May 24, 2018
This Pull Request updates dependency [mocha](https://github.com/mochajs/mocha) from `v3.1.2` to `v3.5.3`



<details>
<summary>Release Notes</summary>

### [`v3.5.3`](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;353--2017-09-11)
[Compare Source](mochajs/mocha@v3.5.2...v3.5.3)
#### 🐛 Fixes

- [#&#8203;3003]: Fix invalid entities in xUnit reporter first appearing in v3.5.1 ([@&#8203;jkrems])

[#&#8203;3003]: `mochajs/mocha#3003

---

### [`v3.5.2`](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;352--2017-09-10)
[Compare Source](mochajs/mocha@v3.5.1...v3.5.2)
#### 🐛 Fixes

- [#&#8203;3001]: Fix AMD-related failures first appearing in v3.5.1 ([@&#8203;boneskull])

[#&#8203;3001]: `mochajs/mocha#3001

---

### [`v3.5.1`](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;351--2017-09-09)
[Compare Source](mochajs/mocha@v3.5.0...v3.5.1)
#### 📰 News

- 📣 Mocha is now sponsoring [PDXNode](http://pdxnode.org)!  If you're in the [Portland](https://wikipedia.org/wiki/Portland,_Oregon) area, come check out the monthly talks and hack nights!
#### 🐛 Fixes

- [#&#8203;2997]: Fix missing `xit` export for "require" interface ([@&#8203;solodynamo])
- [#&#8203;2957]: Fix unicode character handling in XUnit reporter failures ([@&#8203;jkrems])
#### 🔩 Other

- [#&#8203;2986]: Add issue and PR templates ([@&#8203;kungapal])
- [#&#8203;2918]: Drop bash dependency for glob-related tests ([@&#8203;ScottFreeCode])
- [#&#8203;2922]: Improve `--compilers` coverage ([@&#8203;ScottFreeCode])
- [#&#8203;2981]: Fix tpyos and spelling errors ([@&#8203;jsoref])

[#&#8203;2997]: `mochajs/mocha#2997
[#&#8203;2957]: `mochajs/mocha#2957
[#&#8203;2918]: `mochajs/mocha#2918
[#&#8203;2986]: `mochajs/mocha#2986
[#&#8203;2922]: `mochajs/mocha#2922
[#&#8203;2981]: `mochajs/mocha#2981
[@&#8203;solodynamo]: https://github.com/solodynamo
[@&#8203;jkrems]: https://github.com/jkrems
[@&#8203;jsoref]: https://github.com/jsoref

---

### [`v3.5.0`](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;350--2017-07-31)
[Compare Source](mochajs/mocha@v3.4.2...v3.5.0)
#### 📰 News

- Mocha now has a [code of conduct](https://github.com/mochajs/mocha/blob/master/.github/CODE_OF_CONDUCT.md) (thanks [@&#8203;kungapal]!).
- Old issues and PRs are now being marked "stale" by [Probot's "Stale" plugin](https://github.com/probot/stale).  If an issue is marked as such, and you would like to see it remain open, simply add a new comment to the ticket or PR.
- **WARNING**: Support for non-ES5-compliant environments will be dropped starting with version 4.0.0 of Mocha!
#### 🔒 Security Fixes

- [#&#8203;2860]: Address [CVE-2015-8315](https://nodesecurity.io/advisories/46) via upgrade of [debug](https://npm.im/debug) ([@&#8203;boneskull])
#### 🎉 Enhancements

- [#&#8203;2696]: Add `--forbid-only` and `--forbid-pending` flags.  Use these in CI or hooks to ensure tests aren't accidentally being skipped! ([@&#8203;charlierudolph])
- [#&#8203;2813]: Support Node.js 8's `--napi-modules` flag ([@&#8203;jupp0r])
#### 🔩 Other

- Various CI-and-test-related fixes and improvements ([@&#8203;boneskull], [@&#8203;dasilvacontin], [@&#8203;PopradiArpad], [@&#8203;Munter], [@&#8203;ScottFreeCode])
- "Officially" support Node.js 8 ([@&#8203;elergy])

[#&#8203;2860]: `mochajs/mocha#2860
[#&#8203;2696]: `mochajs/mocha#2696
[#&#8203;2813]: `mochajs/mocha#2813
[@&#8203;charlierudolph]: https://github.com/charlierudolph
[@&#8203;PopradiArpad]: https://github.com/PopradiArpad
[@&#8203;kungapal]: https://github.com/kungapal
[@&#8203;elergy]: https://github.com/elergy
[@&#8203;jupp0r]: https://github.com/jupp0r

---

### [`v3.4.2`](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;342--2017-05-24)
[Compare Source](mochajs/mocha@v3.4.1...v3.4.2)
#### 🐛 Fixes

- [#&#8203;2802]: Remove call to deprecated `os.tmpDir` ([@&#8203;makepanic])
- [#&#8203;2820]: Eagerly set `process.exitCode` ([@&#8203;chrisleck])
#### 🔩 Other

- [#&#8203;2778]: Move linting into an npm script ([@&#8203;Munter])

[@&#8203;chrisleck]: https://github.com/chrisleck
[@&#8203;makepanic]: https://github.com/makepanic
[@&#8203;Munter]: https://github.com/Munter

[#&#8203;2778]: `mochajs/mocha#2778
[#&#8203;2802]: `mochajs/mocha#2802
[#&#8203;2820]: `mochajs/mocha#2820

---

### [`v3.4.1`](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;341--2017-05-14)
[Compare Source](mochajs/mocha@v3.3.0...v3.4.1)
Fixed a publishing mishap with git's autocrlf settings.

---

### [`v3.3.0`](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;330--2017-04-24)
[Compare Source](mochajs/mocha@v3.2.0...v3.3.0)
Thanks to all our contributors, maintainers, sponsors, and users! ❤️

As highlights:

- We've got coverage now!
- Testing is looking less flaky \o/.
- No more nitpicking about "mocha.js" build on PRs.
#### 🎉 Enhancements

- [#&#8203;2659]: Adds support for loading reporter from an absolute or relative path ([@&#8203;sul4bh])
- [#&#8203;2769]: Support `--inspect-brk` on command-line ([@&#8203;igwejk])
#### 🐛 Fixes

- [#&#8203;2662]: Replace unicode chars w/ hex codes in HTML reporter ([@&#8203;rotemdan])
#### 🔍 Coverage

- [#&#8203;2672]: Add coverage for node tests ([@&#8203;c089], [@&#8203;Munter])
- [#&#8203;2680]: Increase tests coverage for base reporter ([@&#8203;epallerols])
- [#&#8203;2690]: Increase tests coverage for doc reporter ([@&#8203;craigtaub])
- [#&#8203;2701]: Increase tests coverage for landing, min, tap and list reporters ([@&#8203;craigtaub])
- [#&#8203;2691]: Increase tests coverage for spec + dot reporters ([@&#8203;craigtaub])
- [#&#8203;2698]: Increase tests coverage for xunit reporter ([@&#8203;craigtaub])
- [#&#8203;2699]: Increase tests coverage for json-stream, markdown and progress reporters ([@&#8203;craigtaub])
- [#&#8203;2703]: Cover .some() function in utils.js with tests ([@&#8203;seppevs])
- [#&#8203;2773]: Add tests for loading reporters w/ relative/absolute paths ([@&#8203;sul4bh])
#### 🔩 Other

- Remove bin/.eslintrc; ensure execs are linted ([@&#8203;boneskull])
- [#&#8203;2542]: Expand CONTRIBUTING.md ([@&#8203;boneskull])
- [#&#8203;2660]: Double timeouts on integration tests ([@&#8203;Munter])
- [#&#8203;2653]: Update copyright year ([@&#8203;Scottkao85], [@&#8203;Munter])
- [#&#8203;2621]: Update dependencies to enable Greenkeeper ([@&#8203;boneskull], [@&#8203;greenkeeper])
- [#&#8203;2625]: Use trusty container in travis-ci; use "artifacts" addon ([@&#8203;boneskull])
- [#&#8203;2670]: doc(CONTRIBUTING): fix link to org members ([@&#8203;coderbyheart])
- Add Mocha propaganda to README.md ([@&#8203;boneskull])
- [#&#8203;2470]: Avoid test flake in "delay" test ([@&#8203;boneskull])
- [#&#8203;2675]: Limit browser concurrency on sauce ([@&#8203;boneskull])
- [#&#8203;2669]: Use temporary test-only build of mocha.js for browsers tests ([@&#8203;Munter])
- Fix "projects" link in README.md ([@&#8203;boneskull])
- [#&#8203;2678]: Chore(Saucelabs): test on IE9, IE10 and IE11 ([@&#8203;coderbyheart])
- [#&#8203;2648]: Use `semistandard` directly ([@&#8203;kt3k])
- [#&#8203;2727]: Make the build reproducible ([@&#8203;lamby])

[@&#8203;boneskull]: https://github.com/boneskull
[@&#8203;c089]: https://github.com/c089
[@&#8203;coderbyheart]: https://github.com/coderbyheart
[@&#8203;craigtaub]: https://github.com/craigtaub
[@&#8203;epallerols]: https://github.com/epallerols
[@&#8203;greenkeeper]: https://github.com/greenkeeper
[@&#8203;igwejk]: https://github.com/igwejk
[@&#8203;kt3k]: https://github.com/kt3k
[@&#8203;lamby]: https://github.com/lamby
[@&#8203;Munter]: https://github.com/Munter
[@&#8203;rotemdan]: https://github.com/rotemdan
[@&#8203;seppevs]: https://github.com/seppevs
[@&#8203;sul4bh]: https://github.com/sul4bh

[#&#8203;2470]: `mochajs/mocha#2470
[#&#8203;2542]: `mochajs/mocha#2542
[#&#8203;2621]: `mochajs/mocha#2621
[#&#8203;2625]: `mochajs/mocha#2625
[#&#8203;2648]: `mochajs/mocha#2648
[#&#8203;2653]: `mochajs/mocha#2653
[#&#8203;2659]: `mochajs/mocha#2659
[#&#8203;2660]: `mochajs/mocha#2660
[#&#8203;2662]: `mochajs/mocha#2662
[#&#8203;2669]: `mochajs/mocha#2669
[#&#8203;2670]: `mochajs/mocha#2670
[#&#8203;2672]: `mochajs/mocha#2672
[#&#8203;2675]: `mochajs/mocha#2675
[#&#8203;2678]: `mochajs/mocha#2678
[#&#8203;2680]: `mochajs/mocha#2680
[#&#8203;2690]: `mochajs/mocha#2690
[#&#8203;2691]: `mochajs/mocha#2691
[#&#8203;2698]: `mochajs/mocha#2698
[#&#8203;2699]: `mochajs/mocha#2699
[#&#8203;2701]: `mochajs/mocha#2701
[#&#8203;2703]: `mochajs/mocha#2703
[#&#8203;2727]: `mochajs/mocha#2727
[#&#8203;2769]: `mochajs/mocha#2769
[#&#8203;2773]: `mochajs/mocha#2773

---

### [`v3.2.0`](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#&#8203;320--2016-11-24)
[Compare Source](mochajs/mocha@v3.1.2...v3.2.0)
#### 📰 News
##### Mocha is now a JS Foundation Project!

Mocha is proud to have joined the [JS Foundation](https://js.foundation).  For more information, [read the announcement](https://js.foundation/announcements/2016/10/17/Linux-Foundation-Unites-JavaScript-Community-Open-Web-Development/).
##### Contributor License Agreement

Under the foundation, all contributors to Mocha must sign the [JS Foundation CLA](https://js.foundation/CLA/) before their code can be merged.  When sending a PR--if you have not already signed the CLA--a friendly bot will ask you to do so.

Mocha remains licensed under the [MIT license](https://github.com/mochajs/mocha/blob/master/LICENSE).
#### 🐛 Bug Fix

- [#&#8203;2535]: Fix crash when `--watch` encounters broken symlinks ([@&#8203;villesau])
- [#&#8203;2593]: Fix (old) regression; incorrect symbol shown in `list` reporter ([@&#8203;Aldaviva])
- [#&#8203;2584]: Fix potential error when running XUnit reporter ([@&#8203;vobujs])
#### 🎉 Enhancement

- [#&#8203;2294]: Improve timeout error messaging ([@&#8203;jeversmann], [@&#8203;boneskull])
- [#&#8203;2520]: Add info about `--inspect` flag to CLI help ([@&#8203;ughitsaaron])
#### 🔩 Other

- [#&#8203;2570]: Use [karma-mocha](https://npmjs.com/package/karma-mocha) proper ([@&#8203;boneskull])
- Licenses updated to reflect new copyright, add link to license and browser matrix to `README.md` ([@&#8203;boneskull], [@&#8203;ScottFreeCode], [@&#8203;dasilvacontin])

[#&#8203;2294]: `mochajs/mocha#2294
[#&#8203;2535]: `mochajs/mocha#2535
[#&#8203;2520]: `mochajs/mocha#2520
[#&#8203;2593]: `mochajs/mocha#2593
[#&#8203;2584]: `mochajs/mocha#2584
[#&#8203;2570]: `mochajs/mocha#2570
[@&#8203;Aldaviva]: https://github.com/Aldaviva
[@&#8203;jeversmann]: https://github.com/jeversmann
[@&#8203;ughitsaaron]: https://github.com/ughitsaaron
[@&#8203;villesau]: https://github.com/villesau
[@&#8203;vobujs]: https://github.com/vobujs

Thanks to all our contributors, sponsors and backers!  Keep on the lookout for a public roadmap and new contribution guide coming soon.

---

</details>




---

This PR has been generated by [Renovate Bot](https://renovatebot.com).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug a defect, confirmed by a maintainer
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants