如何使用 Jasmine 为 Restangular 编写单元测试?

How to write unit test to Restangular with Jasmine?

我知道如何为 GET 方法编写测试,但是其他方法呢?放置、修补、删除?

例如,这是我删除用户的服务方法:

removeOne: function(user) {
      var deferred;
      console.log(user);
      deferred = $q.defer();
      if (_.isUndefined(user.id) || _.isNaN(user.id)) {
        AlertsServ.logError(err);
        deferred.reject(err);
      } else {
        user.remove().then(function(result) {
          AlertsServ.logSuccess('Użytkownik został usunięty');
          return deferred.resolve(result);
        }, function(err) {
          AlertsServ.logError(err);
          console.log(err);
          return deferred.reject(err);
        });
      }
      return deferred.promise;
    } 

应该是这样的:

describe('DELETE /users/1', function() {
  beforeEach(function() {
    return $httpBackend.expect('DELETE', BACKEND_URL + '/users/1').respond(200, 'user1');
  });
  return describe('removeOne method', function() {
    return it('should get one user', function() {
      var user;
      user = {
        id: 1,
        routes: 'users'
      };
      return UserServ.removeOne(user);
    });
  });
});

但是如何定义用户呢?

P.S.: 如何定义Jasmine/Karma Restangular base url?

现在,有了更多的单元测试经验,我认为我应该模拟 Restangular 并仅在 Reastangular 正确调用参数时进行测试。我不应该在此测试中添加 $httpBackend。

在单元测试中,我应该检查我的服务是否运行良好,而不是外部库。我说得对吗?

Restangular Github issue page 上有一个有用的示例。

如果您想添加 expect() 来检查响应值,请不要忘记了解 sanitizeRestangularOne()sanitizeRestangularAll() 函数。