我運行前先完成以下事項:它完成的sql異步調用之前量角器 - 等待異步調用執行期望
it('should be able to run sql', function() {
var success = true;
var testsCompleted;
for (var i = 0; i < sqlToRun[1].length; i++) {
sql.runEtlQuery(config, sqlToRun, i).then(function() {
testsCompleted++;
}).catch(function (err) {
console.log(err);
success = false;
});
}
expect(testsCompleted == sqlToRun[1].length).toBeTruthy();
expect(success).toBeTruthy();
});
然而,它運行的是預期的查詢和失敗的考驗,和在開始輸出sql查詢的結果之前,測試會失敗。
SQL查詢看起來是這樣的:
runEtlQuery: function (config, sqlToRun, i) {
var defer = protractor.promise.defer();
var connection = new sql.ConnectionPool(config, function (err) {
var request = new sql.Request(connection);
request.query(sqlToRun[1][i], function (err, recordset) {
if (err) defer.reject("#" + i + ": " + sqlToRun[0][i] +"\x1b[31m Error: \x1b[0m" + err);
else {
console.log("#" + i + ": " + sqlToRun[0][i] + " - \x1b[32mPassed\x1b[0m");
defer.fulfill();
connection.close();
}
});
});
return defer.promise;
},
控制檯輸出看起來像:
[13:12:42] I/launcher - Running 1 instances of WebDriver
[13:12:42] I/local - Starting selenium standalone server...
[13:12:43] I/local - Selenium standalone server started at http://10.197.244.125:62251/wd/hub
Started
..F
Failures:
1) ETL tests should be able to run sql
Message:
Expected false to be truthy.
Stack:
Error: Failed expectation
---<removed stacktrace>---
3 specs, 1 failure
Finished in 270.903 seconds
#17: CDW_Test - Passed
#15: CDW_LabTestName - Passed
#4: CDW_removed - Passed
#5: CDW_removed - Passed
#1: CDW_moreremoved - Passed
#30: CDW_Stuff - Passed
<ect>
我試圖找出如何使它等待所有的SQL查詢來在檢查測試失敗或通過之前完成。
我曾經擁有它,所以它會失敗的第一個錯誤,但想改變它,所以它繼續處理sql查詢以獲得失敗之前的所有失敗列表的測試。
是的,我通常會評論一下'expect'和'testsCompleted'這一行基本上只是爲了調試代碼,以確保它在執行期望前完成所有事情。無論是否有任何sql錯誤,測試總是會成功,只需要「成功」一行。 – Corey
我只是試着用這個來運行,它在應該成功時仍然失敗,在失敗時成功(IE第一次期望會導致失敗,第二次會導致它成功,即使存在錯誤),所以它在運行第一個sql之前仍然運行期望值。 – Corey