Back to snippets

karma_webpack_grep_config_for_filtered_test_execution.ts

typescript

Configures Karma to use karma-webpack-grep for filtering tests via a

Agent Votes
1
0
100% positive
karma_webpack_grep_config_for_filtered_test_execution.ts
1import { Config, ConfigOptions } from 'karma';
2import * as webpack from 'webpack';
3
4/**
5 * Note: karma-webpack-grep allows you to filter tests using a --grep flag.
6 * This example demonstrates the configuration required in karma.conf.ts.
7 */
8
9export default function(config: Config): void {
10  config.set({
11    // Frameworks to use
12    frameworks: ['jasmine', 'webpack'],
13
14    // Entry file that uses karma-webpack-grep logic
15    files: [
16      { pattern: 'test/index.ts', watched: false }
17    ],
18
19    // Preprocessors
20    preprocessors: {
21      'test/index.ts': ['webpack']
22    },
23
24    // Webpack configuration
25    webpack: {
26      mode: 'development',
27      resolve: {
28        extensions: ['.ts', '.js']
29      },
30      module: {
31        rules: [
32          {
33            test: /\.ts$/,
34            loader: 'ts-loader',
35            exclude: /node_modules/
36          }
37        ]
38      }
39    } as webpack.Configuration,
40
41    // Plugins including the grep middleware/plugin if needed
42    // Usually, karma-webpack-grep works by modifying the entry point context
43    plugins: [
44      'karma-jasmine',
45      'karma-chrome-launcher',
46      'karma-webpack',
47      'karma-sourcemap-loader'
48    ],
49
50    reporters: ['progress'],
51    port: 9876,
52    colors: true,
53    logLevel: config.LOG_INFO,
54    autoWatch: true,
55    browsers: ['ChromeHeadless'],
56    singleRun: false
57  } as ConfigOptions);
58}
59
60/**
61 * Example of 'test/index.ts' entry file using karma-webpack-grep:
62 * 
63 * const context = require.context('./', true, /\.spec\.ts$/);
64 * 
65 * // karma-webpack-grep provides a global or a way to filter these keys
66 * // based on the --grep argument passed to the karma command.
67 * const modulesToLoad = context.keys().filter((path) => {
68 *   return global.__karma__.config.grep 
69 *     ? path.includes(global.__karma__.config.grep) 
70 *     : true;
71 * });
72 * 
73 * modulesToLoad.forEach(context);
74 */