Skip to content
This repository has been archived by the owner on Dec 4, 2023. It is now read-only.

Commit

Permalink
Fix messages for file lookup issues - error scenario (mochajs#3654); …
Browse files Browse the repository at this point in the history
…see mochajs#3646

Scenario where multiple files (all) are not found only show a single message.
I feel its useful for debugging to keep the message if only 1 file is not found. Happy to remove if others don't agree.

No changes where at least 1 is found (still prints msg).

See PR mochajs#3650 for full details

## Scenarios

### Nothing given
Command: `mocha`
Output:
```
Error: No test files found: "test/"
```

### Nothing found
Command: `mocha -R json-stream --no-config "test/integration/fixtures/glob/**/*-none.js"`
Output:
```
Error: No test files found: "test/integration/fixtures/glob/**/*-none.js"
```

### Multiple not found
Command: `mocha -R json-stream --no-config "test/integration/fixtures/glob/**/*-none.js" "test/integration/fixtures/glob/**/*-none-again.js"`
New output
```
Error: No test files found
```
Previous output
```
Error: Cannot find any files matching pattern "test/integration/fixtures/glob/**/*-none.js"
Error: Cannot find any files matching pattern "test/integration/fixtures/glob/**/*-none-again.js"
```

## Applicable issues
(semver-patch)
  • Loading branch information
craigtaub authored and boneskull committed Jan 18, 2019
1 parent 1956592 commit bf50220
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 11 deletions.
18 changes: 10 additions & 8 deletions lib/cli/run-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,14 +137,14 @@ exports.handleFiles = ({
spec = []
} = {}) => {
let files = [];
const errors = [];
const unmatched = [];
spec.forEach(arg => {
let newFiles;
try {
newFiles = utils.lookupFiles(arg, extension, recursive);
} catch (err) {
if (err.code === 'ERR_MOCHA_NO_FILES_MATCH_PATTERN') {
errors.push(err.message);
unmatched.push({message: err.message, pattern: err.pattern});
return;
}

Expand All @@ -164,15 +164,17 @@ exports.handleFiles = ({
});

if (!files.length) {
// print messages as an error
errors.forEach(message => {
console.error(ansi.red(`Error: ${message}`));
});
// give full message details when only 1 file is missing
const noneFoundMsg =
unmatched.length === 1
? `Error: No test files found: ${JSON.stringify(unmatched[0].pattern)}` // stringify to print escaped characters raw
: 'Error: No test files found';
console.error(ansi.red(noneFoundMsg));
process.exit(1);
} else {
// print messages as an warning
errors.forEach(message => {
console.warn(ansi.yellow(`Warning: ${message}`));
unmatched.forEach(warning => {
console.warn(ansi.yellow(`Warning: ${warning.message}`));
});
}

Expand Down
27 changes: 24 additions & 3 deletions test/integration/glob.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,24 @@ describe('globbing', function() {
expect(
results.stderr,
'to contain',
'Error: Cannot find any files matching pattern "./*-none.js"'
'Error: No test files found: "./*-none.js"'
);
},
done
);
});

it('should handle multiple non-matching patterns', function(done) {
testGlob.shouldFail(
'./*-none.js ./*-none-twice.js',
function(results) {
expect(results.stderr, 'to contain', 'Error: No test files found');
expect(results.stderr, 'not to contain', '*-none');
},
done
);
});

it('should handle both matching and non-matching patterns in the same command', function(done) {
testGlob.shouldSucceed(
'./*.js ./*-none.js',
Expand Down Expand Up @@ -77,13 +88,23 @@ describe('globbing', function() {
expect(
results.stderr,
'to contain',
'Error: Cannot find any files matching pattern "./*-none.js"'
'Error: No test files found: "./*-none.js"'
);
},
done
);
});

it('should handle multiple non-matching patterns', function(done) {
testGlob.shouldFail(
'"./*-none.js" "./*-none-twice.js"',
function(results) {
expect(results.stderr, 'to contain', 'Error: No test files found');
},
done
);
});

it('should handle both matching and non-matching patterns in the same command', function(done) {
testGlob.shouldSucceed(
'"./*.js" "./*-none.js"',
Expand Down Expand Up @@ -125,7 +146,7 @@ describe('globbing', function() {
expect(
results.stderr,
'to contain',
'Error: Cannot find any files matching pattern "./**/*-none.js"'
'Error: No test files found: "./**/*-none.js"'
);
},
done
Expand Down

0 comments on commit bf50220

Please sign in to comment.