Code coverage with Mocha

后端 未结 3 1669
故里飘歌
故里飘歌 2020-12-07 06:55

I am using Mocha for testing my NodeJS application. I am not able to figure out how to use its code coverage feature. I tried googling it but did not find any proper tutoria

相关标签:
3条回答
  • 2020-12-07 07:16

    Blanket.js works perfect too.

    npm install --save-dev blanket

    in front of your test/tests.js

    require('blanket')({
        pattern: function (filename) {
            return !/node_modules/.test(filename);
        }
    });
    

    run mocha -R html-cov > coverage.html

    0 讨论(0)
  • 2020-12-07 07:21

    You need an additional library for code coverage, and you are going to be blown away by how powerful and easy istanbul is. Try the following, after you get your mocha tests to pass:

    npm install nyc
    

    Now, simply place the command nyc in front of your existing test command, for example:

    {
      "scripts": {
        "test": "nyc mocha"
      }
    }
    
    0 讨论(0)
  • 2020-12-07 07:27

    Now (2020) the preferred way to use istanbul is via its "state of the art command line interface" nyc.

    Setup

    First, install it in your project with

    npm i nyc --save-dev
    

    Then, if you have a npm based project, just change the test script inside the scripts object of your package.json file to execute code coverage of your mocha tests:

    {
      "scripts": {
        "test": "nyc --reporter=text mocha"
      }
    }
    

    Run

    Now run your tests

    npm test
    

    and you will see a table like this in your console, just after your tests output:

    Customization

    Html report

    Just use

    nyc --reporter=html
    

    instead of text. Now it will produce a report inside ./coverage/index.html.

    Report formats

    Istanbul supports a wide range of report formats. Just look at its reports library to find the most useful for you. Just add a --reporter=REPORTER_NAME option for each format you want. For example, with

    nyc --reporter=html --reporter=text
    

    you will have both the console and the html report.

    Don't run coverage with npm test

    Just add another script in your package.json and leave the test script with only your test runner (e.g. mocha):

    {
      "scripts": {
        "test": "mocha",
        "test-with-coverage": "nyc --reporter=text mocha"
      }
    }
    

    Now run this custom script

    npm run test-with-coverage
    

    to run tests with code coverage.

    Force test failing if code coverage is low

    Fail if the total code coverage is below 90%:

    nyc --check-coverage --lines 90 
    

    Fail if the code coverage of at least one file is below 90%:

    nyc --check-coverage --lines 90 --per-file
    
    0 讨论(0)
提交回复
热议问题