2016-12-16 84 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