How to run a single test with Mocha?

Javascriptmocha.js

Javascript Problem Overview


I use Mocha to test my JavaScript stuff. My test file contains 5 tests. Is that possible to run a specific test (or set of tests) rather than all the tests in the file?

Javascript Solutions


Solution 1 - Javascript

Try using mocha's --grep option:

    -g, --grep <pattern>            only run tests matching <pattern>

You can use any valid JavaScript regex as <pattern>. For instance, if we have test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

Then:

$ mocha -g 'logs a'

To run a single test. Note that this greps across the names of all describe(name, fn) and it(name, fn) invocations.

Consider using nested describe() calls for namespacing in order to make it easy to locate and select particular sets.

Solution 2 - Javascript

Depending on your usage pattern, you might just like to use only. We use the TDD style; it looks like this:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

Only this test will run from all the files/suites.

Solution 3 - Javascript

If you are using npm test (using package.json scripts) use an extra -- to pass the param through to mocha

e.g. npm test -- --grep "my second test"

EDIT: Looks like --grep can be a little fussy (probably depending on the other arguments). You can:

Modify the package.json:

"test:mocha": "mocha --grep \"<DealsList />\" .",

Or alternatively use --bail which seems to be less fussy

npm test -- --bail

Solution 4 - Javascript

Just use .only before 'describe', 'it' or 'context'. I run using "$npm run test:unit", and it executes only units with .only.

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

Solution 5 - Javascript

run single test –by filename–

Actually, one can also run a single mocha test by filename (not just by „it()-string-grepping“) if you remove the glob pattern (e.g. ./test/**/*.spec.js) from your mocha.opts, respectively create a copy, without:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

Here's my mocha.single.opts (it's only different in missing the aforementioned glob line)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

Background: While you can override the various switches from the opts-File (starting with --) you can't override the glob. That link also has some explanations.

Hint: if node_modules/.bin/mocha confuses you, to use the local package mocha. You can also write just mocha, if you have it installed globally.


And if you want the comforts of package.json: Still: remove the **/*-ish glob from your mocha.opts, insert them here, for the all-testing, leave them away for the single testing:

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha",
"test-single-watch": "mocha -R list -w",

usage:

> npm run test

respectively

> npm run test-single -- test/ES6.self-test.spec.js 

mind the -- which chains whatever text comes after it to the npm script

Solution 6 - Javascript

There are multiple ways by which you can do this.

  • If you just want to run one test from your entire list of test cases then, you can write only ahead of your test case.

    it.only('<test scenario name>', function() {
      // ...
    });
    

    or you can also execute the mocha grep command as below

    mocha -g <test-scenario-name>
    
  • If you want to run all the test cases which are inside one describe section, then you can also write only to describe as well.

    describe.only('<Description of the tests under this section>', function() {
      // ...
    });
    
  • If you have multiple test files & you wanted to run only one of then you can follow the below command.

    npm test <filepath>
    

    eg :

    npm test test/api/controllers/test.js
    

    here 'test/api/controllers/test.js' is filepath.

Solution 7 - Javascript

You can try "it.only"

 it.only('Test one ', () => {
            
            expect(x).to.equal(y);
        });
it('Test two ', () => {
            
            expect(x).to.equal(y);
        });

in this the first one only will execute

Solution 8 - Javascript

Hi above solutions didn't work for me. The other way of running a single test is

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

This helps to run a test case from a single file and with specific name.

Solution 9 - Javascript

Looking into https://mochajs.org/#usage we see that simply use

> mocha test/myfile

will work. You can omit the '.js' at the end.

Solution 10 - Javascript

Not sure why the grep method is not working for me when using npm test. This works though. I also need to specify the test folder also for some reason.

npm test -- test/sometest.js

Solution 11 - Javascript

For those who are looking to run a single file but they cannot make it work, what worked for me was that I needed to wrap my test cases in a describe suite as below and then use the describe title e.g. 'My Test Description' as pattern.

describe('My Test Description', () => {
  it('test case 1', () => {
    // My test code
  })
  it('test case 2', () => {
  // My test code
  })
})

then run

yarn test -g "My Test Description"

or

npm run test -g "My Test Description"

Solution 12 - Javascript

Using Mocha's --fgrep (or just -f) you can select tests containing string, for example:

mocha -f 'my test x'

will run all tests containing my test x in either it(), describe() or context() blocks.

Solution 13 - Javascript

Consolidate all your tests in one test.js file & your package json add scripts as:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

Type command on your test directory:

npm run api:test

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMisha MoroshkoView Question on Stackoverflow
Solution 1 - JavascriptAsherahView Answer on Stackoverflow
Solution 2 - JavascriptJ BurnettView Answer on Stackoverflow
Solution 3 - JavascriptAshley CoolmanView Answer on Stackoverflow
Solution 4 - JavascriptQauseenMZView Answer on Stackoverflow
Solution 5 - JavascriptFrank NockeView Answer on Stackoverflow
Solution 6 - JavascriptJitendra PawarView Answer on Stackoverflow
Solution 7 - JavascriptBikesh MView Answer on Stackoverflow
Solution 8 - JavascriptRuthraView Answer on Stackoverflow
Solution 9 - JavascriptDaveView Answer on Stackoverflow
Solution 10 - JavascriptAndy NView Answer on Stackoverflow
Solution 11 - JavascriptMuhammadView Answer on Stackoverflow
Solution 12 - JavascriptAustris CirulnieksView Answer on Stackoverflow
Solution 13 - JavascriptShahinView Answer on Stackoverflow