Как сосредоточиться на одном spec в jasmine.js?
У меня есть куча неудачных спецификаций от довольно больших архитектурных изменений. Я бы хотел поработать над их исправлением один за другим, пометив каждого из них "фокусом".
Есть ли у jasmine.js такая функция? Я поклялся, что однажды прочитал, что это так, но я не вижу его в документах.
Ответы
Ответ 1
Вы можете запустить единую спецификацию, используя 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
Ответ 2
При использовании кармы вы можете включить только один тест с помощью iit
или ddescribe
.
(или, согласно комментарию alxndr, поскольку Jasmine 2.1: fit
, fdescribe
)
Это только запуск Spec1
ddescribe('Spec1', function () {
it('should do something', function () {
...
});
});
describe('Spec2', function () {
it('should do something', function () {
...
});
});
Это только запустить testA
describe('Spec1', function () {
iit('testA', function () {
...
});
it('testB', function () {
...
});
});
Ответ 3
В основном с 2.1 с fit
и fdescribe
.
Ответ 4
Для тех, кто наткнется на это, лучший подход, который вы можете настроить из самого кода, заключается в использовании этого плагина: https://github.com/davemo/jasmine-only
Это позволяет вам установить эксклюзивность spec прямо на код следующим образом:
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()
Ответ 5
Есть несколько способов сделать это.
Есть: функция Jasmine Focused Specs (2.2): http://jasmine.github.io/2.2/focused_specs.html
Спецификации фокусировки сделают так, чтобы они были единственными спецификациями, которые запускаются. Любая специфицированная спецификация с привязкой сфокусирована.
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();
});
});
Однако мне не очень нравится идея редактирования моих тестов (fit и fdescribe) для их выборочного запуска. Я предпочитаю использовать тестовый бегун, например karma, который может отфильтровать тесты с использованием регулярного выражения.
Здесь приведен пример использования grunt.
$ grunt karma:dev watch --grep=mypattern
Если вы используете gulp (который является моим любимым занятием), вы можете передать args в gulp-karma с настройками yargs и match, установив конфигурацию кармы.
Своего рода:
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
Ответ 6
Вы можете создать все свои спецификации спереди, но отключите их с помощью 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 () {
});
});
Ответ 7
С автономным Jasmine (2.0.0), на spec_runner.htlm, я мог бы щелкнуть конкретную спецификацию и сосредоточиться на этой спецификации. Я должен был заметить эту функцию раньше.
Ответ 8
Не совсем то, что вы просили, но добавление iit
будет проверять только эту конкретную спецификацию и игнорировать все остальные в файле, ddescribe
работает одинаково. Таким образом, вы можете сосредоточиться на конкретной спецификации, используя iit
или ddescribe