2017-10-10 69 views
0

查看其他問題,無法真正找到問題的原因。我正在嘗試使用摩卡進行測試。確保在此摩卡測試中調用done()回調

it("Should not do the work",function(done) { 
    axios 
    .post("x/y",{ id:a2 }) 
    .then(function(res) { 
     assert(false,"Should not do the work"); 
     done(); 
    }) 
    .catch(function(res) { 
     assert.equal(HttpStatus.CONFLICT,res.status); 
     done(); 
    }); 
}); 

it("Should do the work",function(done) { 
    axios 
    .post("/x/y",{ id: a1 }) 
    .then(function(res) { 
     done(); 
    }) 
    .catch(done); 
}); 

結果是:

√ Should not do the work (64ms) 
1) Should do the work 
1 passing (20s) 
1 failing 

1) Error: Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. 

增加超時沒有工作。

+0

不要忘記你可以簡單'返回'在摩卡的承諾,它會相應地處理它。在你的第一個例子中,你確定這些塊實際上被執行了嗎?我會檢查它是否觸發。 – tadman

回答

0

不要忘記你可以簡單return摩卡的承諾,它會相應地處理它。在你的第一個例子中,你確定這些塊實際上被執行了嗎?

做一個斷言可能會導致一個異常,這可能會破壞你想要做的事情。如果您的承諾庫支持它,您可以始終:

it("Should not do the work",function(done) { 
axios.post("x/y",{ id:a2 }) 
    .then(function(res) { 
    assert(false,"Should not do the work"); 
    }) 
    .catch(function(res) { 
    assert.equal(HttpStatus.CONFLICT,res.status); 
    }) 
    .finally(done); 
}); 

確保無論如何都應該完成。

更妙的是:

it("Should not do the work",function() { 
    return axios.post("x/y",{ id:a2 }) 
    .then(function(res) { 
     assert(false,"Should not do the work"); 
    }) 
    .catch(function(res) { 
     assert.equal(HttpStatus.CONFLICT,res.status); 
    }) 
}); 

手錶做在漁獲斷言和斷言漁獲。一個更好的計劃可能是異步的:

it("Should not do the work", async function() { 
    var res = await axios.post("x/y",{ id:a2 }) 

    assert.equal(HttpStatus.CONFLICT,res.status); 
}); 
+0

第一個例子工作正常。我正面臨第二個例子的問題 –

+0

也許你的實現被破壞,因爲這應該工作。 – tadman

相關問題