2017-03-16 336 views
0

我使用chai-as-promised庫,並承諾由q庫生成的承諾。 這個簡單的測試用例應該可以工作(承諾必須被拒絕)或者我誤解了承諾功能?承諾拒絕失敗,承諾承諾

bdd.it("Test rejection", function() { 
    var promise = q.promise(function (resolve, reject, notify) { 
     reject(new Error("test")); 
    }).then(function() { 
     // Nothing to do 
    }); 
    promise.should.be.rejectedWith(Error); 
    return promise; 
}); 

這個測試失敗,錯誤:測試(我用的實習生作爲單元測試庫)althought以下測試通過:

bdd.it("Test rejection", function() { 
    var promise = q.promise(function (resolve, reject, notify) { 
     reject(new Error("test")); 
    }).should.be.rejectedWith(Error); 
    return promise; 
}); 

回答

1

庫需要你才能返回.rejectedWith()的返回值它來測試這個斷言。你只是在考試中打電話.should.be.rejectedWith(),對此無能爲力。

如果你看一下documentation for chai-as-promised,你可以看到,這是他們在自己的例子在做正是:

return promise.should.be.rejectedWith(Error); 

這同樣適用於像.should.become()其他基於承諾,斷言屬實。

你的第二個測試是正確的。你也可以使用return,而不是結果賦給變量第一的:

bdd.it("Test rejection", function() { 
    return q.promise(function (resolve, reject, notify) { 
     reject(new Error("test")); 
    }).should.be.rejectedWith(Error); 
}); 
+0

好,但這樣如何檢查幾個條件一樣拒絕與代碼等於31的抽樣誤差? – Troopers

+0

@Troopers我不確定,但我認爲你可以做'return q.promise(.....)。catch(function(error){/ *對錯誤執行普通的斷言* /});'' – JLRishe