發佈了jQuery論壇http://forum.jquery.com/topic/how-do-i-test-for-web-sql-exceptions但認爲我會問這裏。我正在嘗試針對我正在開發的Web SQL API編寫單元測試。我試圖說明的情況是參數未被提供時。下面是一些示例代碼:如何測試Web SQL異常?
的Web SQL輔助對象:
var sql = function() {
return {
getDb: function() {
return openDatabase("sampleDb", "1.0", "sampleDb", 5 * 1024 * 1024);
},
initDb: function() {
var db = this.getDb();
if (db) {
db.transaction(function (tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS SampleTable (Key TEXT UNIQUE NOT NULL,Value TEXT NOT NULL)");
});
}
},
insertRecord: function (key, value) {
var db = this.getDb();
if (db) {
db.transaction(function (tx) {
tx.executeSql("INSERT INTO SampleTable (Key, Value) VALUES (?, ?)", [key, value],
function() {
},
function (tx, error) {
throw (error.message);
});
});
}
}
}
}();
下面是我的單元測試:
asyncTest("test1", function() {
raises(function() {
sql.initDb();
sql.insertRecord(null, null);
start();
},
"exception expected");
});
我期待一個異常被拋出,因爲鍵和值參數沒有被提供;然而,當測試完成執行時,它表示不會拋出異常。雖然我沒有明確地拋出一個異常,但是引發了一個異常,因爲動態生成的sql語句不能在沒有提供鍵和值參數的情況下執行。
是否有可能編寫測試考慮到這些類型的場景?
引發應拋出? –
它看起來像有兩種測試錯誤的方法。拋出(http://api.qunitjs.com/throws/)並引發(http://docs.jquery.com/QUnit/raises)。 –