2016-08-19 1 views
0

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.

Antwort

0

Fertig. Ich musste einfach das d.resolve() ein Objekt einfügen, das der Struktur des getesteten Ergebnisobjekts entspricht, also.

| 
| 
select: function() { 
    var d = _$q_.defer(); 
    d.resolve({row : [] }); 
    return d.promise; 
} 
| 
| 
Verwandte Themen