Как успешно игнорировать спецификации с мокко?
Я использую mocha, и я использую "skip" и "only" для запуска определенных спецификаций и тестов.
Но кажется, что каждый раз, когда Мокко применяет их только на тестах.
так что если у меня есть этот код:
var expect = require('expect.js');
var logger = require('log4js').getLogger('TestDemo');
describe('test', function(){
logger.info('this will appear');
it('should not appear', function(){
expect(1+1).to.be(5);
});
});
describe.only('should run', function(){
logger.info('this will appear to');
it('should appear', function(){
expect(5).to.be(5);
})
});
Выход:
[2014-12-12 13:38:37.276] [INFO] TestDemo - this will appear
[2014-12-12 13:38:37.278] [INFO] TestDemo - this will appear to
Тем не менее - первый неожиданный, поскольку я использую describe.only
Я не ожидаю увидеть отпечатки от других спецификаций.
Читая их документацию, она должна работать так, как я ожидаю, но это не так.
by appending .skip() you may tell Mocha to simply ignore these suite(s) and test-case(s)
Однако кажется, что Мокко не игнорирует набор, только тест-кейс.
Как мне этого добиться?
1 ответ
То, что вы получаете, связано с тем, как Мокко обнаруживает ваш тест. В основном Мокко делает это:
Прочитайте все ваши тестовые файлы и выполните их. Обратные вызовы переданы
describe
исполняются сразу. Обратные вызовы переданыit
и до крючков (before
,beforeEach
и т. д.) записываются для последующего исполнения.Мокко выполняет то, что записал, для последующего исполнения (согласно некоторому разумному порядку, который здесь не важен).
Что происходит, когда вы указываете .only
на твоем втором describe
является то, что Мокко не знает, что вы хотите выполнить только это describe
блокировать, пока не выполнит его. Поэтому, когда он сталкивается с первым describe
у него пока нет причин его пропускать. Таким образом, он выполняет обратный вызов, переданный ему.
В конце концов, хотя Мокко выполняет именно те тесты, которые вы сказали ему выполнить. (Когда я запускаю ваш код здесь, запуск Mocha заканчивается 1 passing
то есть ровно один тест был выполнен и пройден.) Тест в первом describe
игнорируется и тест во втором выполняется. Если вы хотите сделать так, чтобы ваши звонки logger.info
будет выполнен, только если один или несколько тестов в вашем describe
блок будет выполнен, а затем положить их в before
крючки:
var expect = require('expect.js');
var logger = require('log4js').getLogger('TestDemo');
describe('test', function(){
before(function () {
logger.info('this will appear');
});
it('should not appear', function(){
expect(1+1).to.be(5);
});
});
describe.only('should run', function(){
before(function () {
logger.info('this will appear too');
});
it('should appear', function(){
expect(5).to.be(5);
})
});