Покрытие кода при тестировании JavaScript: использование Istanbul с Mocha, Jest и Karma

«Покрытие Стамбула» относится к концепции покрытия кода при тестировании программного обеспечения. Это метрика, используемая для измерения эффективности тестов путем определения процента кода, который выполняется в процессе тестирования. Istanbul — популярный инструмент покрытия кода для JavaScript. Ниже я предоставлю вам несколько методов создания покрытия кода с помощью Istanbul, а также примеры кода:

Метод 1: использование Istanbul с Mocha и Node.js
Istanbul можно интегрировать с Mocha, популярной средой тестирования JavaScript, для создания отчетов о покрытии кода для приложений Node.js. Вот пример:

# Install dependencies
npm install --save-dev mocha nyc
# Create a test script (e.g., test.js)
# This is a simple test to check if a number is positive
const assert = require('assert');
function isPositive(num) {
  return num > 0;
}
describe('isPositive', function() {
  it('should return true for positive numbers', function() {
    assert.equal(isPositive(5), true);
  });
  it('should return false for negative numbers', function() {
    assert.equal(isPositive(-5), false);
  });
});
# Update package.json to include the test script and Istanbul configuration
{
  "scripts": {
    "test": "mocha --require @babel/register",
    "coverage": "nyc --reporter=lcov --reporter=text mocha"
  },
  "nyc": {
    "require": [
      "@babel/register"
    ],
    "exclude": [
      "/*.spec.js"
    ],
    "reporter": [
      "html",
      "lcov",
      "text"
    ],
    "all": true
  }
}
# Run the tests and generate the code coverage report
npm run coverage

Метод 2: использование Istanbul с Jest и React
Если вы используете Jest в качестве среды тестирования для приложений React, вы также можете использовать Istanbul для покрытия кода. Вот пример:

# Install dependencies
npm install --save-dev jest istanbul-lib-instrument istanbul-reports
# Update package.json to include the Jest configuration and Istanbul coverage
{
  "scripts": {
    "test": "jest --coverage"
  },
  "jest": {
    "collectCoverage": true,
    "coverageReporters": [
      "json",
      "lcov",
      "text",
      "html"
    ],
    "coverageThreshold": {
      "global": {
        "branches": 80,
        "functions": 80,
        "lines": 80,
        "statements": 80
      }
    },
    "coverageProvider": "v8",
    "transform": {
      "^.+\\.jsx?$": "babel-jest"
    }
  }
}
# Run the tests and generate the code coverage report
npm test

Метод 3: использование Istanbul с Angular и Karma
Для приложений Angular вы можете интегрировать Istanbul с средством выполнения тестов Karma для создания отчетов о покрытии кода. Вот пример:

# Install dependencies
npm install --save-dev karma karma-coverage-istanbul-reporter
# Update karma.conf.js to include the Istanbul coverage reporter
module.exports = function(config) {
  config.set({
    plugins: [
      'karma-jasmine',
      'karma-chrome-launcher',
      'karma-coverage-istanbul-reporter'
    ],
    reporters: ['progress', 'coverage-istanbul'],
    coverageIstanbulReporter: {
      reports: ['html', 'lcovonly', 'text-summary'],
      dir: path.join(__dirname, 'coverage'),
      fixWebpackSourcePaths: true
    },
    // Rest of the Karma configuration
  });
};

Это всего лишь несколько примеров того, как вы можете использовать Istanbul для покрытия кода в различных средах JavaScript. Не забудьте адаптировать примеры в соответствии со структурой и требованиями вашего конкретного проекта.