【问题标题】:Trying to mock $http in Angular试图在 Angular 中模拟 $http
【发布时间】:2013-12-22 19:27:50
【问题描述】:

我正在尝试为我创建的服务创建一些基本的测试覆盖率。这是我的服务:

App.factory('encounterService', function ($resource, $rootScope) {
  return {
    encounters: [],
    encountersTotalCount: 0,
    encountersIndex: 0,
    resource: $resource('/encounters/:encounterId', {encounterId:'@encounterId'}, {
      search: {
        method: 'GET',
        headers: {
          'RemoteUser': 'jjjyyy',
          'Content-Type': 'application/json'
        }
      }
    }),
    getMoreEncounters: function() {
      var that = this;
      that.resource.search({}, function(data) {
        that.encountersTotalCount = data.metadata.totalCount;
        _.each(data.encounters, function(encounter) {
          that.encounters.push(encounter);
        });
        that.busy = false;
        that.offset += 10;
        $rootScope.$broadcast('encountersFetched');
      });
    }
  };
});

这是我无法上班的测试:

describe('encounterService', function() {
  var _encounterService, httpBackend;
  beforeEach(inject(function(encounterService, $httpBackend) {
    _encounterService = encounterService;
    httpBackend = $httpBackend;
    var url = '/encounters/';
    httpBackend.when('GET', url).respond([{}, {}, {}]);
  }));

  afterEach(function() {
    httpBackend.verifyNoOutstandingExpectation();
    httpBackend.verifyNoOutstandingRequest();
  });

  it('should return a list of encounters', function() {
    _encounterService.getMoreEncounters();
    httpBackend.flush();
    expect(_encounterService.encounters.size).toBe(3);
  });
});

我得到的错误是

Chrome 31.0.1650 (Mac OS X 10.8.5) Clinical App services encounterService should return a list of encounters FAILED
    Error: Unexpected request: GET encounters
    No more request expected
        at $httpBackend (/Users/mhamm/Developer/clinical/app/bower_components/angular-mocks/angular-mocks.js:1179:9)
        at sendReq (/Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:7611:9)
        at $http.serverRequest (/Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:7345:16)
        at wrappedCallback (/Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:10549:81)
        at wrappedCallback (/Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:10549:81)
        at /Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:10635:26
        at Scope.$eval (/Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:11528:28)
        at Scope.$digest (/Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:11373:31)
        at Function.$httpBackend.flush (/Users/mhamm/Developer/clinical/app/bower_components/angular-mocks/angular-mocks.js:1453:16)
        at null.<anonymous> (/Users/mhamm/Developer/clinical/test/spec/clinical.spec.js:78:21)
    Error: [$rootScope:inprog] $digest already in progress
    http://errors.angularjs.org/1.2.0/$rootScope/inprog?p0=%24digest
        at /Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:78:12
        at beginPhase (/Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:11830:15)
        at Scope.$digest (/Users/mhamm/Developer/clinical/app/bower_components/angular/angular.js:11364:9)
        at Function.$httpBackend.verifyNoOutstandingExpectation (/Users/mhamm/Developer/clinical/app/bower_components/angular-mocks/angular-mocks.js:1486:16)
        at null.<anonymous> (/Users/mhamm/Developer/clinical/test/spec/clinical.spec.js:68:21)

我不完全理解嘲笑,所以我确定我做的一些基本错误。请告诉我我做错了什么。

【问题讨论】:

  • encounterhttpBackend.when('GET', encounter) 中定义在哪里?应该是httpBackend.when('GET', url)
  • 尝试调试时出错。现已修复。
  • $resource 使用的 URL 似乎是 'encounters',而不是 '/encounters/'。
  • 那行得通。为什么那是 url,当它是 $resource 中的 /encounters/ 时?另外请做出正确的回答,以便我接受。
  • 我不知道。我不使用 $resource 服务。我也觉得很奇怪。我将不回答这个问题,以便其他人可以解释。

标签: unit-testing angularjs


【解决方案1】:

$resource 会自动从 url 中删除尾部斜杠。

从 1.3.0 版本开始,有一个 fourth argument 允许您设置 stripTrailingSlashes: false 以保留这些。

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多