I got some unit tests to do about a service I'm using (angular-websql) and I got an itchy problem.
This service - $webSql - will create a database which is an object with multiple functions :
$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 my unit test, I mocked the service as followed :
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;
}
};
}
};
The problem is that I'm evaluating my promise's result in my controller, for example, I'm testing the result after the select function to see if I have a row in my table. So, I'm using some stuff like result.rows.length
but I don't know how to test it with Jasmine.
Done. I just had to put in the d.resolve()
an object matching the structure of the tested result object, Ie.
|
|
select: function () {
var d = _$q_.defer();
d.resolve({row : [] });
return d.promise;
}
|
|