noor
noor

Reputation: 3004

No coverage information is generated for vscode extension using nyc

To generate the code coverage report for vscode extension, i am using nyc and running those via vscode test runner.

Source : https://code.visualstudio.com/api/working-with-extensions/testing-extension

Project structure:

out
    -test
         -unit
              -testcases.js
              -index.js
    - runTest.js

``

   "test": "rm -rf .nyc_output/ && nyc node ./out/test/runTest.js",

   "nyc": {
        "extends": "@istanbuljs/nyc-config-typescript",
        "require": [
        "ts-node/register",
        "source-map-support/register"
        ],
       "report-dir": ".",
       "reporter": [
       "text",
       "html",
       "lcov"
      ],
      "exclude": ["out/test/**"],
       "include": [ "out/**/*.js" ],
      "check-coverage": true
       },

index.ts file:

import * as path from 'path';
import * as Mocha from 'mocha';
import * as glob from 'glob';

export function run(): Promise<void> {
 const mocha = new Mocha({
ui: 'tdd',
color: true,
timeout: 20000,});

 const testsRoot = path.resolve(__dirname, '../unit');

 return new Promise((c, e) => {

glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {
  if (err) {
    return e(err);
  }

  // Add files to the test suite
  files.forEach(f => {
    mocha.addFile(path.resolve(testsRoot, f));
  });

  try {
    // Run the mocha test
    mocha.run(failures => {
      if (failures > 0) {
        e(new Error(`${failures} tests failed.`));
      } else {
        c();
      }
    });
  } catch (err) {
    // eslint-disable-next-line no-console
    console.error(err);
    e(err);
  }
 });
});
}

runTest.ts file:

import * as path from 'path';

import { runTests } from 'vscode-test';

async function main() {
 try {
    // The folder containing the Extension Manifest package.json
    // Passed to `--extensionDevelopmentPath`
    const extensionDevelopmentPath = path.resolve(__dirname, '../../');

    // The path to test runner
    // Passed to --extensionTestsPath
    //const extensionTestsPath = path.resolve(__dirname, './unit/index-coverage');
    const extensionTestsPath = path.resolve(__dirname, './unit/index');

    // Download VS Code, unzip it and run the integration test
    await runTests({ extensionDevelopmentPath, extensionTestsPath });
 } catch (err) {
    //console.error('Failed to run tests');
    process.exit(1);
 }
}

main();

I was not able to generate code coverage report.It generates report but without any information.

What i am doing wrong here??

Upvotes: 3

Views: 2016

Answers (1)

noor
noor

Reputation: 3004

There are couple of ways to do this. I found some valuable information while checking below link: How do a generate vscode TypeScript extension coverage report

Seems the easiest one is from user frenya. but the other two also gives valuable information.

Upvotes: 1

Related Questions