Command line 基于模式匹配的Karma Jasmine选择性测试执行

Command 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() {

我在调用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() {
    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)
。相关:与其描述
,不如描述