Ich habe einige Komponententests über einen Service zu tun, den ich benutze (eckig-websql) und ich habe ein juckendes Problem.AngularJS - WebSQL - Tests in Karma mit Jasmine auf Objekt, das mehrere Versprechen zurückgibt
Dieser Service - $ WebSQL - wird eine Datenbank erstellen, die ein Objekt mit mehreren Funktionen ist:
$scope.db = $webSql.openDatabase('lastUser', '1.0', 'Data storage of last connected user', 2 * 1024 * 1024);
$scope.db.select(tableName, whereClause).then(function (result) {...});
$scope.db.insert(tableName, whereClause).then(function (result) {...});
$scope.db.update(tableName, whereClause).then(function (result) {...});
$scope.db.del(tableName, whereClause).then(function (result) {...});
And so on...
In meiner Unit-Test, verspottete ich den Dienst wie folgt:
mock$webSql = {
openDatabase: function() {
return {
createTable: function() {
var d = _$q_.defer();
d.resolve();
return d.promise;
},
insert: function() {
var d = _$q_.defer();
d.resolve();
return d.promise;
},
del: function() {
var d = _$q_.defer();
d.resolve();
return d.promise;
},
update: function() {
var d = _$q_.defer();
d.resolve();
return d.promise;
},
select: function() {
var d = _$q_.defer();
d.resolve();
return d.promise;
}
};
}
};
Das Problem ist, dass ich das Ergebnis meines Versprechens in meinem Controller auswerte, zum Beispiel, ich teste das Ergebnis nach der Select-Funktion, um zu sehen, ob ich eine Zeile in meiner Tabelle habe. Also verwende ich ein paar Sachen wie result.rows.length
, aber ich weiß nicht, wie ich es mit Jasmine testen soll.