diff --git a/web/karma.conf.js b/web/karma.conf.js
index f41512575..5250d985e 100644
--- a/web/karma.conf.js
+++ b/web/karma.conf.js
@@ -15,7 +15,7 @@ const webpack = require('webpack');
 module.exports = function (config) {
   config.set({
     frameworks: ['jasmine', 'source-map-support'],
-    reporters: ['progress', 'kjhtml'],
+    reporters: ['progress', 'kjhtml', 'coverage'],
     plugins: [
       'karma-webpack',
       'karma-chrome-launcher',
@@ -23,6 +23,7 @@ module.exports = function (config) {
       'karma-jasmine-html-reporter',
       'karma-source-map-support',
       'karma-sourcemap-loader',
+      'karma-coverage',
       new webpack.SourceMapDevToolPlugin({
         /*
          * filename: null, // if no value is provided the sourcemap is inlined
@@ -52,6 +53,13 @@ module.exports = function (config) {
       'pgadmin/static/bundle/slickgrid.js': ['webpack', 'sourcemap'],
     },
 
+    // optionally, configure the reporter
+    coverageReporter: {
+      type : 'html',
+      dir : 'coverage/',
+      includeAllSources: true,
+    },
+
     webpack: webpackConfig,
     webpackMiddleware: {
       stats: 'errors-only',
diff --git a/web/package.json b/web/package.json
index 71147404a..23d3b1399 100644
--- a/web/package.json
+++ b/web/package.json
@@ -19,7 +19,7 @@
     "enzyme": "^3.11.0",
     "enzyme-adapter-react-16": "^1.15.2",
     "eslint": "5.15.1",
-    "eslint-plugin-react": "^7.20.3",
+    "eslint-plugin-react": "^7.20.5",
     "file-loader": "^3.0.1",
     "iconfont-webpack-plugin": "^4.2.1",
     "image-webpack-loader": "^4.6.0",
@@ -84,10 +84,12 @@
     "immutability-helper": "^3.0.0",
     "imports-loader": "^0.8.0",
     "ip-address": "^5.8.9",
+    "istanbul-instrumenter-loader": "^3.0.1",
     "jquery": "^3.5.1",
     "jquery-contextmenu": "^2.8.0",
     "jquery-ui": "^1.12.1",
     "json-bignumber": "^1.0.1",
+    "karma-coverage": "^2.0.3",
     "leaflet": "^1.5.1",
     "moment": "^2.24.0",
     "moment-timezone": "^0.5.23",
diff --git a/web/webpack.test.config.js b/web/webpack.test.config.js
index 95b280ea1..843bf5596 100644
--- a/web/webpack.test.config.js
+++ b/web/webpack.test.config.js
@@ -15,6 +15,8 @@ const sourcesDir = path.resolve(__dirname, 'pgadmin/static');
 const nodeModulesDir = path.resolve(__dirname, 'node_modules');
 const regressionDir = path.resolve(__dirname, 'regression');
 
+//const sourcesDirPem = path.resolve(__dirname, 'pgadmin/pem');
+
 module.exports = {
   mode: 'development',
   devtool: 'inline-source-map',
@@ -65,7 +67,17 @@ module.exports = {
         ',jquery.event.drag' +
         '!exports-loader?' +
         'Slick',
-      }],
+      },
+      {
+        test: /\.js$|\.jsx$/,
+        use: {
+          loader: 'istanbul-instrumenter-loader',
+          options: { esModules: true },
+        },
+        enforce: 'post',
+        exclude: /node_modules|slickgrid|plugins|bundle|generated|\.spec\.js$/,
+      },
+    ],
   },
 
   resolve: {
