7

我已经正确设置了业力配置,配置文件,在后台运行,非常棒。一旦我更改并保存文件,它就会重新运行测试......所有 750 个单元测试。我希望能够运行一些。除了手动破解配置文件或注释掉许多文件中的数百个测试之外,有没有简单的方法可以做到这一点?

例如,当使用 mocha 运行命令行服务器测试时,我只使用 regexp: mocha -g 'only tests that I want'。使调试和快速检查变得更加容易。

4

6 回答 6

7

所以现在我觉得自己很傻。mocha 支持非常窄的正则表达式匹配。

这会运行所有测试

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

这仅运行“第一次测试”

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

你也可以做it.only()

我应该注意到这一点。叹。

于 2014-10-29T13:52:28.113 回答
4

不幸的是,你可以在业力启动时这样做,而不是在运行时。如果你想动态地改变它,你必须付出更多的努力。

假设您想从一开始就专注于特定的测试集/套件,在karma-mocha插件页面上有这段代码可以执行您想要的操作:

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>'],
      ...
    }
  });
};

为了使<pattern>参数化,您必须将配置文件包装在Configurator中,该配置器将侦听 CLI 并为您自定义业力配置。

看看这个 SO 答案,了解如何设置一个非常简单的Configurator

于 2014-10-28T10:12:00.703 回答
0

1)在你的 karma.conf.js 从终端获取参数:

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

2)为了运行单个测试,您需要使用所有配置设置一个选项对象(没有文件和预处理器):

var option = {

  webpack: {
    // webpack configuration
  },

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

3)设置你的文件路径和预处理器:

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

  option.preprocessors = {};

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

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

4)在终端中运行:

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

有关更多信息,请查看此 PR: https ://github.com/webpack/karma-webpack/pull/178

于 2016-10-11T16:49:30.023 回答
0

我有同样的问题,这是我对 karma.conf.js 稍作改动的解决方法。实际上,从命令行获取一个参数并修改“文件”中的模式。我使用minimist来解析参数列表。

在配置文件中:

/* 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
    //....
    ],
    //....

  });
};

在命令提示符下运行:

karma start test/karma.conf.js --single-run  --test #TEST_CASE_FILE#
于 2015-07-30T04:17:30.410 回答
0

有不同的方法可以做到这一点。

  1. 使用--grep选项。这样做的缺点是所有测试都在运行特定测试套件之前进行了预处理。

  2. 使用.only方法。缺点和没有一样。1. 使用 1 和 2 方法我的节点进程经常崩溃,经常说内存不足。

  3. 限制处理的文件选项。这是超级快。

将预处理限制为特定文件夹(如UnitIntegration文件夹)。为此,我使用了自定义 cli 选项--only并在 karma 配置中

const modules = config.only;

在文件模式中

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

优点:开发人员通过在预处理阶段进行限制以更快地进行小改动时,只能运行某些测试。

您也可以使用 3 号和 1 号或 2 号的组合。

于 2018-09-10T07:59:49.550 回答
0

在这里可以提供帮助的一个不错的扩展是 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

它会创建一个调试页面,您可以在其中单独运行每个测试。对于大型项目非常有用!

于 2016-01-18T17:30:51.033 回答