AngularJS - WebSQL - 使用Jasmine对Karma进行测试,返回多个承诺

时间:2016-08-19 12:14:22

标签: javascript angularjs unit-testing karma-jasmine web-sql

我接受了一些关于我使用(angular-websql)的服务的单元测试,我遇到了一个痒的问题。

此服务 - $ webSql - 将创建一个具有多个功能的对象数据库:

$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...

在我的单元测试中,我嘲笑了服务如下:

 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;
      }
    };
  }
};

问题在于我在我的控制器中评估我的承诺结果,例如,我在select函数之后测试结果,看看我的表中是否有一行。所以,我使用了result.rows.length之类的东西,但我不知道如何使用Jasmine进行测试。

1 个答案:

答案 0 :(得分:0)

完成。我只需要在d.resolve()中放入一个与测试结果对象的结构相匹配的对象,即。

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