如何在不启动任何Jasmine测试的情况下运行Karma服务器

时间:2016-02-04 09:55:33

标签: javascript jasmine tdd karma-runner karma-jasmine

我想将--grep=PATTERN标志传递给karma run,以便只执行特定的测试。但是如果我用karma start karma.conf.js启动我的业力服务器,所有Jasmine单元测试都会立即执行。由于我有几百次测试,这需要太长时间。

问题:如何启动业力服务器并且不运行任何测试,而是在调用karma run时仅运行测试?

3 个答案:

答案 0 :(得分:2)

听起来你喜欢的是使用终端通过karma / jasmine一次运行一次测试。如果这是正确的,这就是我运行单个文件测试的方法。

注意:我使用gulp来调整Karma,但这仍然适用于使用全局业力。

如果你选择使用它,这是我的 gulp 方法。

gulp.task('karma', function (done) {
  karma.start({
    configFile: __dirname + '/karma.conf.js'
  }, done);
});

在我的 karma.config.js

module.exports = function(config) {

  config.set({

  basePath: '',

  frameworks: ['jasmine'],

  // Note the **setFilesUpForTesting** function below. Just change this.
  files: setFilesUpForTesting(),

  ... the rest of file
} // end of module!!!!!

- >现在在模块下方,在相同的 karma.config.js 文件中添加以下内容

// ------------------------------------------------------------------ >
// Below code is for running either single or all test files.
// To run a single test, just pass in the test file name like so...

// If the test file name was rs-test-me-now_test.js
// To spool up Karma you would enter

// gulp karma --single-test=rs-test-me-now

// To just run all tests
// gulp karma

var fixedPath = [
  'public/js/jquery.js',
  'public/js/jquery-ui.min.js',
  'public/js/foundation.min.js',
  'public/js/angular.min.js',
  'public/js/angular-mocks.js',
  'public/js/angular-route.min.js',
  'public/js/angular-sanitize.min.js',
  'public/js/angular-cookies.js'
  // all the files you want to include when tests run. I removed most of mine, but left some for reference.
];

var baseTestPath = 'public/test/'; // This is the path from root to your test/spec folder that contains all your tests.

function setFilesUpForTesting(){
  fixedPath.push( testPath());
  return fixedPath;
}

function testPath(){
  return singleTestPath() || fullTestPath();
}

function fullTestPath(){
  // If your root folder was butter, and all your tests were labeled
  // like my_file_spec.js, and all your specs were in a folder under root
  // called bread, then the path below would be
  // 'butter/bread/**/*_spec.js' Got it?
  return  'public/test/**/*_test.js'; // change this to suit your path.
}

function singleTestPath(){
  var passedArgument = process.argv.filter(function(item){ if(/--single-test=/.test(item)){return item; }});
  if( isEmpty( passedArgument )){ return false; }
  return baseTestPath + '**/*' + fileName( passedArgument ) + '_test.js';
  // change above to fit your path.
}

function fileName( argument ){
  if( !argument ){ return; }
  return argument[0].replace('--single-test=', ''); // Change single-test if you want to.
}

function isEmpty( array ){
  return array.length === 0;
}

当我想运行测试时,我只需运行以下

  

对于单个文件测试    gulp karma --single-test = test-me-now

// when test-me-now_test.js is the file name.
// and root/pulblic/test/   has all my test files and test folders.
// or root/bread/butter/ and file is called test-me-now_spec.js as in the other example I gave above.

希望这有助于某人。如果你无法启动并运行,请提出问题。

<强>更新

我刚从命令行使用了karma,这也是如上所述使用gulp的。

如果可以从命令行访问karma,现在可以执行此操作,如果您实现上面的karma.config.js文件...

注意:我必须使用业力开始而非运行

karma start (will run all tests)
// or for a single test file
karma start --single-test=my-test-file-name // but without the _test.js or _spec.js whatever you call your files. I had reasons for doing this, but you can change the functions above to accept the complete file name if needed.

注意:

您也可以在&#34; - &#34;之后更改措辞。 in --single-test = 只要确保你更新我分享的karma.config.js信息。

答案 1 :(得分:1)

让服务器运行相当容易。您需要做的就是修改karma.conf.js文件。如果添加以下内容,则它将启动服务器而不执行任何测试。

singleRun : true

现在,当你运行它时,准备服务器,但实际上没有运行任何测试。它还为您提供了一个准备好开始运行的浏览器窗口。点击 debug 将开始运行测试。

enter image description here

我从未尝试过运行个别测试,但我刚刚确认使用karma run本身会在我的服务器上触发它们。因此,如果您使用karma run限制设置,则应对其进行排序。

答案 2 :(得分:0)

回答自己,因为现在有一个解决方案:焦点测试(https://jasmine.github.io/2.1/focused_specs.html)。

您可以将fdescribe()替换为it()以运行单个测试套件,或者为了执行单个测试,您可以将fit()替换为fit("This test is executed on its own because it is prefix with f (focus test)", (done) => { done(); });

request.object.getACL().permissionsById[*userId*]