mocha - GradedJestRisk/js-training GitHub Wiki

Table of Contents

General

List:

CLI

Options:

  • filter on test title mocha --grep ^<NAME>
  • to run test until it passes (unless MAX_FAILED_RETRIES is reached): --retry MAX_FAILED_RETRIES
  • run all tests from current directory, recursively (and list test count BTW) --recursive .
  • change timeout (default 2s) --timeout <TIMEOUT_MILLIS>

Keywords

Modifier:

  • only (at any level, multiple times)
  • skip

First steps

Install

Install:

  • global npm install –g mocha
  • local npm install --save-dev mocha
Update package.json
"scripts": {
     "test": "mocha"
}

Hello, world

Simple start Using gitBash: mocha --colors

Settings

They can be stored in a .mocharc.js file

module.exports = {
  color: true,
  (..)
}

In order to not import dev libraries in each test, you can link to a file that would contains

import chai from 'chai'
import chaiAsPromised from 'chai-as-promised'
import chaiExclude from 'chai-exclude'
import chaiThings from 'chai-things'
import sinonChai from 'sinon-chai'

chai.use(chaiAsPromised)
chai.use(chaiExclude)
chai.use(chaiThings)
chai.use(sinonChai)

eslint support

Add to .eslint.json (SO)

require('dotenv').config()
"standard": {
  "env": [ "mocha" ]
}

Add to .eslint.yml

env:
  (..)
  mocha: true

misc

If using should instead of assert: temporary solution (SO)

overrides:
  - files:
      - "*.test.js"
      - "*.spec.js"
    rules:
      no-unused-expressions: 'off'

Execute test several times

const _ = require('lodash');
const expect = require('chai').expect;
describe('should run many times', () => {
  _.times(10, ()=> {
    it('should be true', async () => {
     expect(true).to.be.true;
    });
  });
});

Execute test several times unless suceeeds (https://mochajs.org/#retry-tests)

const expect = require('chai').expect;
describe('should run many times', function() {
  it('should be true', function() {
    this.retries(10);
    expect((new Date).getTime() % 2 === 0 ).to.be.true;
  });
});
⚠️ **GitHub.com Fallback** ⚠️