簡體   English   中英

異步測試如何在實習生中工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM