我运行前先完成以下事项:它完成的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