我已经正确设置了业力配置,配置文件,在后台运行,非常棒。一旦我更改并保存文件,它就会重新运行测试......所有 750 个单元测试。我希望能够运行一些。除了手动破解配置文件或注释掉许多文件中的数百个测试之外,有没有简单的方法可以做到这一点?
例如,当使用 mocha 运行命令行服务器测试时,我只使用 regexp: mocha -g 'only tests that I want'
。使调试和快速检查变得更加容易。
我已经正确设置了业力配置,配置文件,在后台运行,非常棒。一旦我更改并保存文件,它就会重新运行测试......所有 750 个单元测试。我希望能够运行一些。除了手动破解配置文件或注释掉许多文件中的数百个测试之外,有没有简单的方法可以做到这一点?
例如,当使用 mocha 运行命令行服务器测试时,我只使用 regexp: mocha -g 'only tests that I want'
。使调试和快速检查变得更加容易。
所以现在我觉得自己很傻。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()
我应该注意到这一点。叹。
不幸的是,你可以在业力启动时这样做,而不是在运行时。如果你想动态地改变它,你必须付出更多的努力。
假设您想从一开始就专注于特定的测试集/套件,在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。
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
我有同样的问题,这是我对 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#
有不同的方法可以做到这一点。
使用--grep
选项。这样做的缺点是所有测试都在运行特定测试套件之前进行了预处理。
使用.only
方法。缺点和没有一样。1. 使用 1 和 2 方法我的节点进程经常崩溃,经常说内存不足。
限制处理的文件选项。这是超级快。
将预处理限制为特定文件夹(如Unit
或Integration
文件夹)。为此,我使用了自定义 cli 选项--only
并在 karma 配置中
const modules = config.only;
在文件模式中
files: typeof modules === 'string ? '[`tests/**/${module}/**/*.(test|spec).js`]: 'tests/**/*.(test|spec).js'
优点:开发人员通过在预处理阶段进行限制以更快地进行小改动时,只能运行某些测试。
您也可以使用 3 号和 1 号或 2 号的组合。
在这里可以提供帮助的一个不错的扩展是 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
它会创建一个调试页面,您可以在其中单独运行每个测试。对于大型项目非常有用!