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

Fix message if no files found #3650

Merged
merged 7 commits into from
Jan 4, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
error and exit, dont warn
  • Loading branch information
craigtaub committed Jan 3, 2019
commit db722d0c6df02914e946254b2393a71d1c8a932c
4 changes: 2 additions & 2 deletions lib/cli/run-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@ exports.handleFiles = ({
newFiles = utils.lookupFiles(arg, extension, recursive);
} catch (err) {
if (err.code === 'ERR_MOCHA_NO_FILES_MATCH_PATTERN') {
console.warn('Warning: %s: %O', err.message, err.pattern);
return;
console.error(ansi.red(`${symbols.error} ${err.message}`));
process.exit(1);
}

throw err;
Expand Down
2 changes: 1 addition & 1 deletion lib/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ exports.lookupFiles = function lookupFiles(filepath, extensions, recursive) {
files = glob.sync(filepath);
if (!files.length) {
throw createNoFilesMatchPatternError(
'cannot find any files matching pattern "' + filepath + '"',
'Cannot find any files matching pattern "' + filepath + '"',
filepath
);
}
Expand Down
33 changes: 9 additions & 24 deletions test/integration/glob.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,21 @@ describe('globbing', function() {
expect(
results.stderr,
'to contain',
'cannot find any files matching pattern "./*-none.js"'
'✖ Cannot find any files matching pattern "./*-none.js"'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you pull in the symbol from log-symbols? this may fail on windows

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or just leave it and the pattern out...

             'Cannot find any files matching pattern'

Copy link
Contributor Author

@craigtaub craigtaub Jan 3, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like idea including symbol as could erroneously fall into warning block if just pattern matching the message.

Copy link
Contributor

@plroebuck plroebuck Jan 3, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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}`));
    });
  }

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Contributor

@plroebuck plroebuck Jan 4, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If a subset don't exist, those would be warnings -- stated I had no problem with that.
Just the files.length === 0 error case.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

);
},
done
);
});

it('should handle both matching and non-matching patterns in the same command', function(done) {
testGlob.shouldSucceed(
testGlob.shouldFail(
'./*.js ./*-none.js',
function(results) {
expect(
results.stdout,
'to contain',
'["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,'
);
expect(
results.stderr,
'to contain',
'cannot find any files matching pattern'
'✖ Cannot find any files matching pattern'
);
},
done
Expand Down Expand Up @@ -77,26 +72,21 @@ describe('globbing', function() {
expect(
results.stderr,
'to contain',
'cannot find any files matching pattern'
'✖ Cannot find any files matching pattern "./*-none.js"'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

);
},
done
);
});

it('should handle both matching and non-matching patterns in the same command', function(done) {
testGlob.shouldSucceed(
testGlob.shouldFail(
'"./*.js" "./*-none.js"',
function(results) {
expect(
results.stdout,
'to contain',
'["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,'
);
expect(
results.stderr,
'to contain',
'cannot find any files matching pattern'
'✖ Cannot find any files matching pattern'
);
},
done
Expand Down Expand Up @@ -125,26 +115,21 @@ describe('globbing', function() {
expect(
results.stderr,
'to contain',
'cannot find any files matching pattern'
'✖ Cannot find any files matching pattern "./**/*-none.js"'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

);
},
done
);
});

it('should handle both matching and non-matching patterns in the same command', function(done) {
testGlob.shouldSucceed(
testGlob.shouldFail(
'"./**/*.js" "./**/*-none.js"',
function(results) {
expect(
results.stdout,
'to contain',
'["end",{"suites":2,"tests":2,"passes":2,"pending":0,"failures":0,'
);
expect(
results.stderr,
'to contain',
'cannot find any files matching pattern'
'✖ Cannot find any files matching pattern'
);
},
done
Expand Down