dfd.callback
直到執行它本身才執行任何操作。請記住,它是爲promise回調(即傳遞給promise.then
的函數)設計的,而不是參數可能爲錯誤的Node.js樣式回調(即function (error, result) {}
)。它不會檢查是否有錯誤作爲參數傳遞。
不知道conn
是什麼,但看到你如何將dfd.callback
作爲參數傳遞給非承諾的東西,我懷疑你是在嘗試使用Node.js樣式的回調函數,並且調用立即出錯。我們可能會爲這些類型的回調的簡便包裝在未來將其轉換爲一個承諾接口,但在那之前,你可能只需要做這樣的事情:
it('should connect in 5 seconds', function() {
var dfd = this.async(5000);
conn.connect(credentials, dfd.callback(function(error, result) {
if (error) {
throw error;
}
expect(result).to.... something
}));
});
否則,不知道什麼conn
是並看到你的實際主張是什麼,這很難說出問題在這裏。只要回調中沒有任何內容會引發錯誤,測試將被視爲成功。
編輯:因此,根據您的意見,上述聽起來像你的回調是一個事件監聽器多次調用不同的信息。在這種情況下,你可以做的是這樣的:
it('should connect in 5 seconds', function() {
var dfd = this.async(5000);
conn.connect(credentials, dfd.rejectOnError(function (result) {
if (result !== 'what I want') {
return;
}
expect(result).to.... something
// all other tests…
// nothing threw an error, so it is a successful test
dfd.resolve();
}));
});
dfd.rejectOnError
作品類似,只是它dfd.callback
不能自動解決的承諾;最後你自己去做。
也許測試通過,因爲回調_is_被稱爲預期和您的回調內的斷言恰好通過?我猜你已經證實回調沒有被調用。只是一個想法。 – bitpshr 2013-05-03 00:55:46
那麼,'conn.connect'必須執行異步請求,但是在任何XMLHttpRequest發生之前觸發回調。 – 2013-05-03 01:00:59
那麼,我已經想出了即使在連接建立之前觸發回調。但是,'result'變量保存狀態,我只有在狀態等於某個值時才需要檢查它。我可以說'這不是我的情況,當你打另一個結果時再次打電話'嗎? – 2013-05-03 01:04:38