Home

Awesome

Cypress + Typescript App + Code Coverage ❤ ️️

This example uses @cypress/code-coverage plugin for Cypress.io test runner.

This repository aims to document how to set up code coverage in Cypress against a Typescript app.

The tricky part of this particular setup is to configure Istanbul to instrument your Typescript code.

See Cypress code coverage docs for more insight on how it works.

Running the example 🏃🏻‍

First, make sure you have Yarn installed, and then:

yarn

You can run the example Typescript app:

yarn start

Or run the Cypress tests with code coverage:

CODE_COVERAGE=true yarn test

⚠️

We're enabling code coverage behind an environment variable to only instrument our code in this scenario. Don't serve instrumented code to your users.

To see the code coverage report just do:

open coverage/lcov-report/index.html

How does it work 🤨

After installing the handy @cypress/code-coverage plugin, we will need to instrument our compiled TS code run by Cypress ( see the "Instrumenting the code" section below ).

Once your instrumentation is set up, we need to install a few extra dependencies to make Istanbul understand your Typescript source files:

yarn add -D \
  @istanbuljs/nyc-config-typescript \
  source-map-support \
  ts-node

and make sure that Istanbul takes advantage of it by adding this configuration in your package.json or in .nycrc.json

  "nyc": {
    "extends": "@istanbuljs/nyc-config-typescript",
    "all": true
  },

Instrumenting the code

Babel

If you're compiling TS though Babel, the easiest way is to use babel-plugin-istanbul which will instrument the transpiled code for us. ( this is the approach taken on this example repo ):

yarn add -D  babel-plugin-istanbul

Istanbul

In case you're compiling TS through the TSC, you'll need to manually make Istanbul instrument your TS source files and serve that to Cypress:

yarn nyc instrument --compact=false src instrumented