Как успешно игнорировать спецификации с мокко?

Я использую 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 ответ

Решение

То, что вы получаете, связано с тем, как Мокко обнаруживает ваш тест. В основном Мокко делает это:

  1. Прочитайте все ваши тестовые файлы и выполните их. Обратные вызовы переданы describe исполняются сразу. Обратные вызовы переданы it и до крючков (before, beforeEach и т. д.) записываются для последующего исполнения.

  2. Мокко выполняет то, что записал, для последующего исполнения (согласно некоторому разумному порядку, который здесь не важен).

Что происходит, когда вы указываете .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);
    })
});
Другие вопросы по тегам