我使用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)
然而似乎摩卡不会忽略套件,只有测试用例。
我怎样才能做到这一点?
答案 0 :(得分:3)
你得到的与Mocha如何发现你的测试有关。基本上Mocha做到了这一点:
读取所有测试文件并执行它们。传递给describe
的回调会立即执行 。传递给it
和钩子(before
,beforeEach
等)的回调记录在中以供日后执行。
Mocha执行它记录的内容以供以后执行(根据一些在这里不重要的合理顺序)。
当您在第二个.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);
})
});