Repository navigation
Fix message if no files found - #3650
Conversation
boneskull
left a comment
There was a problem hiding this comment.
LGTM, no major issues. you can change some stuff I've commented on if you want 👍
| results.stderr, | ||
| 'to contain', | ||
| 'cannot find any files matching pattern "./*-none.js"' | ||
| '✖ Cannot find any files matching pattern "./*-none.js"' |
There was a problem hiding this comment.
can you pull in the symbol from log-symbols? this may fail on windows
There was a problem hiding this comment.
Or just leave it and the pattern out...
'Cannot find any files matching pattern'There was a problem hiding this comment.
I like idea including symbol as could erroneously fall into warning block if just pattern matching the message.
There was a problem hiding this comment.
Continuing with that thought, confusing to use the same message as both error and warning.
if (!files.length) {
console.error(ansi.red('Error: No test files found...'));
process.exit(1);
} else {
messages.forEach(message => {
console.warn(ansi.yellow(`Warning: ${message}`));
});
}There was a problem hiding this comment.
Hmm I actually think listing the errors is better, from the users perspective it's more helpful and easier to see the mistake that way. I've used it myself during his pr.
There was a problem hiding this comment.
So if user gives 20 globs and none exist, one message per is somehow more informative than just saying "none found"? I disagree.
For warnings, fine -- but not when none exist.
There was a problem hiding this comment.
As @craigtaub stated, it was useful information, so if some subset of the paths are not found, it seems reasonable to list them (but not if all of them are not found).
FWIW, a user can avoid this problem altogether by using shell expansion, but that's not portable.
There was a problem hiding this comment.
If a subset don't exist, those would be warnings -- stated I had no problem with that.
Just the files.length === 0 error case.
There was a problem hiding this comment.
Ok i think its clear you both feel the single error message is better than multiple error messages. For debugging purposes I found the multiple one better, the initial idea of using an error was to indicate nothing did run, but perhaps its not clear enough.
| results.stderr, | ||
| 'to contain', | ||
| 'cannot find any files matching pattern' | ||
| '✖ Cannot find any files matching pattern "./*-none.js"' |
| results.stderr, | ||
| 'to contain', | ||
| 'cannot find any files matching pattern' | ||
| '✖ Cannot find any files matching pattern "./**/*-none.js"' |
| // print messages as an error | ||
| errors.forEach(message => { | ||
| console.error(ansi.red(`Error: ${message}`)); | ||
| }); |
There was a problem hiding this comment.
This should have simply said:
console.error(ansi.red('Error: No test files found'));Nothing is gained by outputting multiple error messages, and now we have both warnings and errors with the same message.
There was a problem hiding this comment.
They don't show at the same time though (warnings and errors). I mentioned in my comment earlier I felt giving multiple error messages was helpful in those scenarios (in that I found it useful myself).
There was a problem hiding this comment.
I'm a bit confused about when we are going to show errors vs warnings...
There was a problem hiding this comment.
Wasn't the name of the issue "too much noise if no files found"? Retry one of your tests with lots of nonexistent globs...
There was a problem hiding this comment.
I just didn't want to see a warning about it (which duplicated the filenames) and then another error. If that's fixed, then great
There was a problem hiding this comment.
Check the description I tried to give full details on what shows when.
There was a problem hiding this comment.
I already understand what would be displayed when. Disagreed about what should show for the error case (nothing matched) -- an "n not found" scenario with this code outputs n error messages instead of one. Worse, it uses the exact same message text as the warning case.
| results.stderr, | ||
| 'to contain', | ||
| 'cannot find any files matching pattern "./*-none.js"' | ||
| 'Error: Cannot find any files matching pattern "./*-none.js"' |
There was a problem hiding this comment.
test pattern should not be part of check for maintainability. WET due to filename.
There was a problem hiding this comment.
why was this change request ignored?
There was a problem hiding this comment.
Wasn't on purpose, I thought there was nothing outstanding so I merged it.
Have made a new PR continuing (referenced) the work, I think it's more practical to converse there.
| results.stderr, | ||
| 'to contain', | ||
| 'cannot find any files matching pattern' | ||
| 'Error: Cannot find any files matching pattern "./*-none.js"' |
There was a problem hiding this comment.
test pattern (filename) should not be part of check for maintainability.
| results.stderr, | ||
| 'to contain', | ||
| 'cannot find any files matching pattern' | ||
| 'Error: Cannot find any files matching pattern "./**/*-none.js"' |
There was a problem hiding this comment.
test pattern (filename) should not be part of check for maintainability.
| spec = [] | ||
| } = {}) => { | ||
| let files = []; | ||
| const errors = []; |
There was a problem hiding this comment.
More specific about what you're storing since you're not storing the Error instance that was thrown.
const messages = [];
Description of the Change
Previously would print a warning for each missing file/dir, then an error if no valid files were found.
Now prints slimmer warnings and errors only if no tests found.
Tests cover both scenarios.
Alternate approach
Print an error for each missing file/dir (and no final error). Still exit if no valid files were found.
Nasty as flags everything as an error even if there is a passing test
Scenarios:
Nothing given
Command:
mochaNew output:
Previous output:
Difference = No warning and slimmer message
Nothing found
Command:
mocha -R json-stream --no-config "test/integration/fixtures/glob/**/*-none.js"New output:
Previous output:
Difference = No warning and slimmer message
1 found but 1 not found:
Command:
mocha -R json-stream --no-config "test/integration/fixtures/glob/**/*.js" "test/integration/fixtures/glob/**/*-none.js"New output:
Previous output:
Difference = slimmer warning
1 found but 2 not found:
Command:
mocha -R json-stream --no-config "test/integration/fixtures/glob/**/*.js" "test/integration/fixtures/glob/**/*-none.js" "test/integration/fixtures/glob/**/*-none-again.js"New output:
Previous output:
Difference = Simmer warnings
2 not found:
Command:
mocha -R json-stream --no-config "test/integration/fixtures/glob/**/*-none.js" "test/integration/fixtures/glob/**/*-none-again.js"New output:
Previous output:
Difference = Warnings swapped for errors and no extra error.
1 found:
Command:
mocha -R json-stream --no-config "test/integration/fixtures/glob/**/*.js"New output:
Previous output:
Difference = nothing
Applicable issues
Fixes #3646
(semver-patch)