Command line 基于模式匹配的Karma Jasmine选择性测试执行
我在调用karma jasmine上的命令行选项时遇到问题,该选项只允许执行与给定模式匹配的测试。我的说明书如下: /path/to/single test/main.spec.jsCommand line 基于模式匹配的Karma Jasmine选择性测试执行,command-line,pattern-matching,jasmine,karma-runner,karma-jasmine,Command Line,Pattern Matching,Jasmine,Karma Runner,Karma Jasmine,我在调用karma jasmine上的命令行选项时遇到问题,该选项只允许执行与给定模式匹配的测试。我的说明书如下: /path/to/single test/main.spec.js describe('my first test suite', function() { it('always passes', function() { expect(true).toBe(true); }); it('still always passes', function() {
describe('my first test suite', function() {
it('always passes', function() {
expect(true).toBe(true);
});
it('still always passes', function() {
expect(true).toBe(true);
});
});
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: ['*.spec.js'],
exclude: [],
preprocessors: {},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
browsers: ['PhantomJS'],
singleRun: true
});
};
我假设描述(例如“仍然始终通过”)是匹配grep命令行选项指定的模式的项。当我试图运行第二个示例时,因为它的描述是唯一包含单词“still”的示例,两个示例都会执行,而不仅仅是一个:
$ karma start -- --grep=still
INFO [karma]: Karma v0.12.35 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.8 (Linux 0.0.0)]: Connected on socket 7Dn7Ez1Reap7ch0Uzsb0 with id 44623726
PhantomJS 1.9.8 (Linux 0.0.0): Executed 2 of 2 SUCCESS (0.002 secs / 0.001 secs)
如何基于模式执行这一个示例?没有给出模式匹配选项用法的示例
我在文章中读到,grep选项可以与“fit”和“fdescribe”结合使用。这在测试时有效。但是,在使用带有“fit”的grep的情况下,grep选项的模式参数的目的是什么?(如果能够有选择地执行测试,而不需要扩充源代码,那就太好了!)
以下是我的项目中的其余文件供参考:
/path/to/single test/karma.conf.js
describe('my first test suite', function() {
it('always passes', function() {
expect(true).toBe(true);
});
it('still always passes', function() {
expect(true).toBe(true);
});
});
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: ['*.spec.js'],
exclude: [],
preprocessors: {},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
browsers: ['PhantomJS'],
singleRun: true
});
};
/path/to/single test/package.json
{
"name": "single-test",
"version": "1.0.0",
"description": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "MIT",
"devDependencies": {
"jasmine-core": "^2.3.4",
"karma": "^0.12.35",
"karma-jasmine": "^0.3.5",
"karma-phantomjs-launcher": "^0.2.0",
"phantomjs": "^1.9.17"
}
}
您必须启动Karma服务器,然后在Karma runner中指定
--grep
选项。也就是说,类似于:
karma start path/to/karma.conf.js
然后在另一个终端:
karma run path/to/karma.conf.js -- --grep=still
在配置选项中设置singleRun:false
,这一点很重要。有一个插件,可以通过名称中的标记来帮助筛选正在运行的测试
用法示例:
$ karma start --tags smoke
$ karma start --skip-tags slow,bench
$ karma start --tags bench --skip-tags slow
$ karma start --tag-prefix 'scope:' --tags critical
规范如下所示:
describe('Example test', () => {
it('should be a #smoke test', () => {
// ...
});
it('#slow test', () => {
// ...
});
})
describe('Performance test suite #bench', () => {
it('#fast #smoke test', () => {
// ...
});
it('#slow test', () => {
// ...
});
})
describe('Custom tag prefix', () => {
it('test scope:critical', () => {
// ...
});
})
附加说明:当您运行上述命令时,第二个terminal命令将只运行一次并退出,第一个terminal窗口将继续监视更改并仅运行筛选的测试子集。如果您不想按特定顺序grep多个标记,可以使用,例如,对于标记
#tag1
和#tag2
:--grep='(?=.*tag1)(?=.*tag2)
。相关:与其描述,不如描述