![](/img/trans.png)
[英]how to write functional tests in intern js on an app that has async fynctions?
[英]How do async tests work in intern?
異步測試如何在實習測試框架中工作? 我試圖讓它們像在示例中一樣運行,但異步測試立即通過而不等待回調運行。
it('should connect in 5 seconds', function () {
var dfd = this.async(5000);
conn.connect(credentials, dfd.callback(function(result) {
expect(result).to.... something
}));
}
測試立即通過。 我究竟做錯了什么?
dfd.callback
在執行之前不會執行任何操作。 請記住,它是為promise回調(即傳遞給promise.then
的函數)而設計的,而不是Node.js樣式的回調,其中參數可能是錯誤(即function (error, result) {}
)。 它不會檢查錯誤是否作為參數傳遞。
在不知道conn
是什么的情況下,但看到你如何將dfd.callback
作為參數傳遞給非承諾的東西,我懷疑你是在嘗試使用Node.js風格的回調,並且調用立即出錯。 我們可能會在將來為這些類型的回調提供一個便利包裝器,將它們轉換為promise接口,但在此之前,您可能只需要執行以下操作:
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
類似,但它不會自動解析promise; 你最后自己這樣做。
你的結構沒問題。 dfd
為測試成功設置5秒的超時,然后立即嘗試conn.connect()
,這不是實習生框架的一部分。 如果您正在嘗試簡單的XHR請求,請嘗試使用getUrlCallback
函數。
他們在這個網址上有一個非常酷的測試列表: https : //github.com/theintern/intern/wiki/Writing-Tests 。 查找兩個異步示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.