如何使用mocha成功忽略规范?

时间:2014-12-12 11:43:18

标签: mocha

我使用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 个答案:

答案 0 :(得分:3)

你得到的与Mocha如何发现你的测试有关。基本上Mocha做到了这一点:

  1. 读取所有测试文件并执行它们。传递给describe的回调会立即执行 。传递给it和钩子(beforebeforeEach等)的回调记录在中以供日后执行

  2. Mocha执行它记录的内容以供以后执行(根据一些在这里不重要的合理顺序)。

  3. 当您在第二个.only上指定describe时,会发生什么?Mocha 知道您只想执行此describe直到它执行它。因此当它遇到第一个describe时,没有理由跳过它。所以它执行传递给它的回调。

    在一天结束时,尽管Mocha正在执行您告诉它执行的测试。 (当我在这里运行你的代码时,Mocha运行以1 passing结束,这意味着只执行了一个测试并且它已通过。)第一个describe中的 test 被忽略,并且执行第二个测试。如果您要进行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);
        })
    });