Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
14
rated 0 times [  21] [ 7]  / answers: 1 / hits: 16467  / 7 Years ago, fri, march 24, 2017, 12:00:00

In my npm package, I would like to emulate the pattern Meteor follows: a source file (named client.js) has a test file (named client.tests.js) live in a src/ folder. Tests run with the npm test command.



I'm following the usage docs to the 't'. I do not want to use a find in my package test command.




  1. I understand that mocha can recursively execute tests:



    mocha --recursive


  2. I understand that mocha can execute tests in a specific subfolder using the --recursive flag:



    mocha src --recursive


  3. I also understand that I can specify a glob to filter files by passing *.tests.js:



    mocha *.tests.js




But, I want all three. I want mocha to test only files ending in tests.js in the src folder, recursively checking subdirectories.



mocha --recursive *.tests.js

// See the files?
$ > ll ./src/app/
total 168
-rw-r--r-- ... client.js
-rw-r--r-- ... client.tests.js

// Option A
$ > mocha --recursive *.tests.js
Warning: Could not find any test files matching pattern: *.tests.js
No test files found

// Option B
$ > mocha *.tests.js --recursive
Warning: Could not find any test files matching pattern: *.tests.js
No test files found.

// Option C
$ > mocha --recursive src/app/*.tests.js
3 passing (130ms)
3 failing


So...




  1. Why is mocha not picking up the *.tests.js files in the subfolders?

  2. Why DOES it work if I specify the full path to the file?

  3. How do I make it work as desired?


More From » node.js

 Answers
59

The --recursive flag is meant to operate on directories. If you were to pass a glob that matches directories, then these directories would be examined recursively but if you pass a glob that matches files, like you are doing, then --recursive is ineffective. I would suggest not using --recursive with a glob because globs already have the capability to look recursively in subdirectories. You could do:



mocha 'src/app/**/*.tests.js'


This would match all files that match *.tests.js recursively in src/app. Note how I'm using single quotes around the pattern. This is to quote the pattern so that it is passed as-is to Mocha's globbing code. Otherwise, your shell might interpret it. Some shells, depending on options, will translate ** into * and you won't get the results you want.


[#58398] Thursday, March 23, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
adrianobeds

Total Points: 558
Total Questions: 118
Total Answers: 116

Location: Luxembourg
Member since Tue, Jan 25, 2022
2 Years ago
;