有希望的测试服务

时间:2016-04-25 14:11:38

标签: angularjs unit-testing jasmine karma-jasmine

我有一个简单的service查询api,使用promisescontrollers获取一些数据。我想使用jasmine单独测试服务。但是,服务依赖于我注入的一些常量来获取api urls

以下是服务的定义方式:

angular.module('dbRequest', [])
  .factory('Request', ['$http', 'localConfig', function($http, localConfig){
    return {
      getRevision: function(){
          return $http({
            url: localConfig.data,
            method: "GET",
            crossDomain: true,
            headers: {
              'Content-Type': 'application/json; charset=utf-8'
            }
          })
      }
}]);

localConfig被定义为app.js中的常量。关注this tutorial,以下是我测试服务的方式:

describe('Service: Request', function () {

  // load the controller's module
  beforeEach(module('webApp'));

  var reqService, $q, $scope, lc;

  beforeEach(function(){
    inject(function($injector){
      reqService = $injector.get('Request');
      $q = $injector.get('$q');
      lc = $injector.get('localConfig');
      $scope = $injector.get('$rootScope').$new();
    });
  });

  it('should test service definition', function(done){
    expect(reqService).toBeDefined();
    done();
  });

  it('should get db revision', function(done){
    spyOn(reqService, ['getRevision']).and.returnValue($q.when({/*what comes here??*/}));
    reqService.getRevision().then(function(res){
      expect(res.length).toBe(1);
      done();
    });
    $scope.$digest();
  });
});

我需要测试从api(这是一个数组)返回的数据长度是否大于0.这决定了在这种情况下测试是否通过。这带来了两个问题:

  • 如何在service
  • 中注入常量
  • 如何测试回复?

我的回答如下:

data: ["option1", "option2"]

0 个答案:

没有答案