How do I run only certain tests in karma?

拈花ヽ惹草 提交于 2019-12-10 14:36:27

问题


I have karma config set up correctly, config file, running in the background, just great. As soon as I change and save a file, it reruns the tests.... all 750 of the unit tests. I want to be able to run just a few. Short of manually hacking the config file or commenting out hundreds of tests across many files, is there any easy way to do it?

E.g. when running command line server tests using say mocha, I just use regexp: mocha -g 'only tests that I want'. Makes it much easier to debug and quickly check.


回答1:


So now I feel foolish. mocha supports a very narrow version of regexp matching.

This runs all tests

describe('all tests',function(){
   describe('first tests',function(){
   });
   describe('second tests',function(){
   });
});

This runs just 'first tests'

describe('all tests',function(){
   describe.only('first tests',function(){
   });
   describe('second tests',function(){
   });
});

You can also do it.only()

I should have noticed that. Sigh.




回答2:


You can do that at karma startup time unfortunately, not at runtime. If you want to change it dynamically you have to put some more effort.

Say you want to focus on a specific set/suite of tests from the beginning, on the karma-mocha plugin page there's this snippet of code to do what you want:

module.exports = function(config) {
  config.set({
    // karma configuration here
    ...

    // this is a mocha configuration object
    client: {
      // The pattern string will be passed to mocha
      args: ['--grep', '<pattern>'],
      ...
    }
  });
};

In order to make the <pattern> parametric you have to wrap the configuration file in a Configurator that will listen CLI and customize the karma configuration for you.

Have a look to this SO answer to know how to setup a very simple Configurator.




回答3:


I have same question and this is my workround by a little change on karma.conf.js. In fact, take an argument from command line and modify the pattern in "files". I use minimist to parse the argument list.

In config file:

/* Begin */
var minimist = require('minimist');
var argv = minimist(process.argv);
var testBase="test/unit";
var testExt=".spec.js";
var unitTestPattern = testBase+'/**/*'+testExt;
if ("test" in argv){
  unitTestPattern = testBase+"/"+argv["test"]+testExt;
}
/* End */
module.exports = function(config){
  config.set({
    //....

    files : [
    //....
      unitTestPattern,             //place here
//      'test/unit/**/*.spec.js',  //replace this
    //....
    ],
    //....

  });
};

run in command prompt:

karma start test/karma.conf.js --single-run  --test #TEST_CASE_FILE#



回答4:


a nice extension that can help here is karma-jasmine-html-reporter-livereload https://www.npmjs.com/package/karma-jasmine-html-reporter-livereload

or karma-jasmine-html-reporter https://www.npmjs.com/package/karma-jasmine-html-reporter?__hstc=72727564.86845f057bb4d741f59d578059e30644.1443860954685.1453095135802.1453138187458.37&__hssc=72727564.1.1453138187458&__hsfp=2285154675

It creates a debug page in which you can run each test individually. very useful for large projects!




回答5:


1) In your karma.conf.js get the params from the terminal:

var files = (process.env.npm_config_single_file) ? process.env.npm_config_single_file : 'test/test_index.js';

2) In order to run a single test you will need to set an option object with all your configuration (Without files and preprocessors):

var option = {

  webpack: {
    // webpack configuration
  },

  // more configuration......
};

3) Set your files path and preprocessors:

  option.files = [
      {pattern: files, watch: false}
  ];

  option.preprocessors = {};

  option.preprocessors[files] = [ 'webpack', 'sourcemap' ];

  // call config.set function
  config.set(option);

4) Run in the terminal:

npm test --single_file=**/my-specific-file-spec.js

For more information check this PR: https://github.com/webpack/karma-webpack/pull/178




回答6:


There are different ways to do it.

  1. Use --grep option. The disadvantage of this is that all the tests are preprocessed before running the specific test suite.

  2. Use .only method. Disadvantage same as no. 1. Using both 1 and 2 method my node process used to crash often saying out of memory.

  3. Limit the files options for processing. This is super fast.

Limit preprocessing to certain folder like Unit or Integration folder. For this I have used custom cli option --only and in the karma config

const modules = config.only;

and in the the files pattern

files: typeof modules === 'string ? '[`tests/**/${module}/**/*.(test|spec).js`]: 'tests/**/*.(test|spec).js'

Advantage: Developers can run only certain tests when they make a small change way faster by limiting in the preprocessing phase.

You can also use combination of no.3 and no.1 or 2.



来源:https://stackoverflow.com/questions/26603402/how-do-i-run-only-certain-tests-in-karma

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!