2016-12-16 59 views
0

我有以下测试代码,我的意图是通过对象进行循环时我想检查条件并首次运行,并将go_on的值指定为false,并在错误时跳过测试。我测试了这个代码,没有循环通过对象,它的工作原理。我使用nodejs和mocha测试框架。试图根据条件循环跳过测试用例

var s={a:c,b:a}; 

Object.keys(s).forEach(function (x){ 
    before(function(done1){ 
    if (go_on==true) {   
     done1(); 
    } 
    else this.skip(); 
    }); 
    it('Exit if go_on false', function (done) { 

    go_on=false; 
    console.log(go_on); 

    done(); 
    }); 
}); 
+0

这是一个有点不清楚实际的问题是什么(因为有在原岗位字面上没有问句的任何地方)。 – machineghost

回答

0

好像你在你的it设置go_on=false,但随后在before使用它。 before代码发生在it代码之前,因此在it中设置的值go_on永远不会被使用。

此外,您实际上并未在任何地方使用sx

0

如果我理解正确,您正试图根据数据条件跳过一些测试。您的基本想法是正确的,但您需要使用beforeEach()before()before()回调在整个测试套件之前执行,而beforeEach()回调在每次测试之前运行。这里是工作的例子:

describe('conditional tests', function() { 
    var go_on = true; 
    var s={ a:'1', b:'2', c:'3'}; 

    Object.keys(s).forEach(function (x){ 
    beforeEach(function(done){ 
     if (go_on === true) { 
     done(); 
     } 
     else this.skip(); 
    }); 
    it('test for ' + x, function (done) { 
     if (x === 'b') { 
     go_on=false; 
     console.log('stopping tests'); 
     } 
     done(); 
    }); 
    }); 
}); 

输出的结果是:

$ mocha test.js 

    conditional tests 
    ✓ test for a 
stopping tests 
    ✓ test for b 
    - test for c 


    2 passing (13ms) 
    1 pending