Подтвердить что ты не робот

Как запустить сервер Karma без запуска тестов Jasmine

Я хочу передать флаг --grep=PATTERN на karma run, так что будут выполнены только конкретные тесты. Но если я начинаю свой сервер кармы с помощью karma start karma.conf.js, все модульные тесты Jasmine будут выполняться немедленно. Поскольку у меня несколько сотен тестов, это занимает слишком много времени.

Вопрос: Как я могу запустить сервер karma и не запускать никаких тестов, а запускать только тесты, когда я вызываю karma run?

4b9b3361

Ответ 1

Похоже на то, что вы предпочли бы, чтобы запустить один тест за раз с помощью кармы/жасмина, используя терминал. Если это правильно, это то, что я делаю, чтобы запускать тесты с одним файлом.

Примечание: Я использую 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.

Надеюсь, это поможет кому-то. Задавайте вопросы, если вы не можете его запустить и запустить.

UPDATE

Я просто использовал карму из командной строки, и это работает, как указано выше, при использовании gulp.

Если карма доступна из командной строки, вы можете сделать это, если вы реализуете файл 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.

Примечание:

Вы также можете изменить формулировку после "-" в -single-test = просто убедитесь, что вы обновили информацию о karma.config.js, которую я поделил.

Ответ 2

Хорошо, чтобы запустить сервер довольно просто. Все, что вам нужно сделать, это изменить ваш файл karma.conf.js. Если вы добавите следующее, то он запустит сервер без выполнения каких-либо тестов.

singleRun : true

Теперь, когда вы запустите, он будет готов к серверу, но на самом деле не будет выполнять никаких тестов. Он также предоставит вам окно браузера, готовое для запуска. Нажатие отладки начнет выполнение тестов.

введите описание изображения здесь

Я никогда не пробовал запускать отдельные тесты, но я только что проверил, что использование karma run по-своему запускает их все на моем сервере. Поэтому, если вы ограничиваете набор с помощью karma run, тогда вы должны быть отсортированы.

Ответ 3

Отвечая на вопрос, как есть решение сейчас: Фокус тесты (https://jasmine.github.io/2.1/focused_specs.html).

Вы можете заменить describe() на fdescribe() для запуска одного набора тестов или для выполнения одного теста вы можете заменить it() на fit():

fit("This test is executed on its own because it is prefix with f (focus test)", (done) => {
     done();
});