2016-09-06 43 views
0

如何在模塊開始工作前在摩卡斷言?如果我不想這樣做讓我知道。目前,使用promises,如果我使用catch塊發生錯誤,我會添加一個assert來使before塊失敗。我想要的是失敗的描述塊,但我得到兩個可能的結果。 1.我的測試套件完全崩潰,2.我必須等待每個測試的每次超時,因爲before塊失敗。如何在模塊開始工作之前讓摩卡斷言?

before(function (done) { 
    promise() 
     .then(function() { 
      done(); 
     }) 
     .catch(function (error) { 
      assert(!error); 
      done(); 
     }); 
}); 

我甚至試過這個,想着,也許這個事情從來沒有叫過。

before(function (done) { 
    promise() 
     .then(function() { 
      //no done here 
     }) 
     .catch(function (error) { 
      assert(!error); 
     }); 
     .finally(function() { 
      done(); 
     }); 
}); 

到目前爲止,以避免崩潰和等待,並使其工作,我已經做到了這一點:

var beforeError; 
before(function (done) { 
    promise() 
     .then(function() { 
      done(); 
     }) 
     .catch(function (error) { 
      beforeError = error; 
      done(); 
     }); 
}); 

it('test something', function() { 
    assert(beforeError, 'Before block failed with error.'); 
}); 

我如果有一個更好的方式去了解這個真的很好奇,這樣,如果我之前/之前/之後/之後每個塊失敗,它不會導致我等待年齡或我的套件崩潰!感謝S/O社區! :)

+1

只需調用完成的錯誤。 '完成(ERR)' –

回答

2

我不能說你使用的done回調,但摩卡3.0現在支持promises in before hooks。如果我寫這個,我會讓返回的承諾拋出自己的錯誤,這會在不打斷套件的情況下使前鉤失敗。

before(function() { 
    return promise(<async behavior here>); 
});