Как мне сосредоточиться на одной спецификации в jasmine.js? - PullRequest
141 голосов
/ 16 декабря 2011

У меня есть куча неудачных спецификаций из-за довольно большого архитектурного изменения.Я хотел бы поработать над их исправлением, пометив каждую из них «focus».

Есть ли в jasmine.js такая функция?Я поклялся, что однажды прочитал, что это так, но я не вижу этого в документации.

Ответы [ 8 ]

243 голосов
/ 22 мая 2014

При использовании Karma вы можете включить только один тест с fit или fdescribe (iit и ddescribe в Жасмине до версии 2.1).


Это только Spec1:

// or "ddescribe" in Jasmine prior 2.1
fdescribe('Spec1', function () {
    it('should do something', function () {
        // ...
    });
});

describe('Spec2', function () {
    it('should do something', function () {
        // ...
    });
});

Запускается только testA:

describe('Spec1', function () {

    // or "iit" in Jasmine prior 2.1
    fit('testA', function () {
        // ...
    });

    it('testB', function () {
        // ...
    });

});
117 голосов
/ 15 ноября 2014

В ядре с версии 2.1 с fit и fdescribe.

53 голосов
/ 16 декабря 2011

Вы можете запустить одну спецификацию, используя URL для спецификации

describe("MySpec", function() { 
  it('function 1', function() { 
    //... 
  }) 

  it('function 2', function() { 
    //... 
  } 

}) 

Теперь вы можете запустить только всю спецификацию по этому URL http://localhost:8888?spec=MySpec и выполнить первый тест с http://localhost:8888?spec=MySpec+function+1

24 голосов
/ 30 декабря 2014

Есть несколько способов сделать это.

Есть: функция Жасмин Сфокусированные характеристики (2.2): http://jasmine.github.io/2.2/focused_specs.html

Фокусирующие спецификации сделают так, чтобы они были единственными, которые работают. Любая спецификация, заявленная с помощью fit, фокусируется.

describe("Focused specs", function() {
  fit("is focused and will run", function() {
    expect(true).toBeTruthy();
  });

  it('is not focused and will not run', function(){
    expect(true).toBeFalsy();
  });
});

Однако мне не очень нравится идея редактировать мои тесты (подходить и описывать) для их выборочного запуска. Я предпочитаю использовать тестовый бегун, такой как karma , который может отфильтровывать тесты, используя регулярное выражение.

Вот пример использования grunt .

$ grunt karma:dev watch --grep=mypattern

Если вы используете gulp (мой любимый исполнитель задач), вы можете передавать аргументы в gulp-karma с яргами и шаблонами совпадений, установив конфигурацию karma.

Вроде как:

var Args = function(yargs) {
  var _match = yargs.m || yargs.match;
  var _file = yargs.f || yargs.file;
  return {
    match: function() { if (_match) { return {args: ['--grep', _match]} } }
  };
}(args.argv);


var Tasks = function() {
  var test = function() {
    return gulp.src(Files.testFiles)
      .pipe(karma({ configFile: 'karma.conf.js', client: Args.match()}))
      .on('error', function(err) { throw err; });
  };

  return {
    test: function() { return test() }
  }
}(Args);

gulp.task('default', ['build'], Tasks.test);

См. Мою суть: https://gist.github.com/rimian/0f9b88266a0f63696f21

Итак, теперь я могу запустить одну спецификацию, используя описание:

Мой локальный тестовый прогон: (выполнено 1 из 14 (пропущено 13))

gulp -m 'triggers the event when the API returns success'
[20:59:14] Using gulpfile ~/gulpfile.js
[20:59:14] Starting 'clean'...
[20:59:14] Finished 'clean' after 2.25 ms
[20:59:14] Starting 'build'...
[20:59:14] Finished 'build' after 17 ms
[20:59:14] Starting 'default'...
[20:59:14] Starting Karma server...
INFO [karma]: Karma v0.12.31 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
WARN [watcher]: All files matched by "/spec/karma.conf.js" were excluded.
INFO [Chrome 42.0.2311 (Mac OS X 10.10.3)]: Connected on socket hivjQFvQbPdNT5Hje2x2 with id 44705181
Chrome 42.0.2311 (Mac OS X 10.10.3): Executed 1 of 14 (skipped 13) SUCCESS (0.012 secs / 0.009 secs)
[20:59:16] Finished 'default' after 2.08 s

Также см .: https://github.com/karma-runner/karma-jasmine

24 голосов
/ 05 августа 2013

Для любого, кто наткнулся на это, лучший подход, который вы можете настроить из самого кода, это использовать этот плагин: https://github.com/davemo/jasmine-only

Он позволяет вам устанавливать спецификацию прямо на код, напримерэто:

describe.only("MySpec", function() { 
  it('function 1', function() { 
    //... 
  }) 

  it.only('function 2', function() { 
    //... 
  }
})
// This won't be run if there are specs using describe.only/ddescribe or it.only/iit
describe("Spec 2", function(){}) 

Было долгое обсуждение, чтобы добавить это в ядро ​​Jasmine, см .: https://github.com/pivotal/jasmine/pull/309

Если вы используете Jasmine через Karma / Testacular, вы должны ужеиметь доступ к ddescribe() и iit()

8 голосов
/ 16 декабря 2011

Вы можете создать все свои спецификации заранее, но отключите их с помощью xdescribe и xit, пока не будете готовы протестировать их.

describe('BuckRogers', function () {
  it('shoots aliens', function () {
    // this will be tested
  });

  xit('rescues women', function () {
    // this won't
  });
});

// this whole function will be ignored
xdescribe('Alien', function () {
  it('dies when shot', function () {
  });
});
1 голос
/ 20 сентября 2014

Не совсем то, что вы просили, но добавление iit будет проверять только эту конкретную спецификацию и игнорировать все остальные в файле, ddescribe работает таким же образом.Таким образом, вы можете сосредоточиться на конкретной спецификации, используя iit или ddescribe

1 голос
/ 21 марта 2014

С помощью автономного Jasmine (2.0.0) в spec_runner.htlm я мог щелкнуть конкретную спецификацию и сосредоточиться на этой спецификации. Я должен был заметить эту функцию ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...