AngularJS Karma测试"错误:意外请求:GET"似乎没有执行请求

时间:2015-02-05 18:21:03

标签: angularjs karma-runner karma-jasmine

我有一个AngularJS应用程序在测试中遇到一些问题。

方式

PlanService.prototype.getPlanList = function() {
  this.activeRequest = true;
  return this.PlanFactory.planList().then((function(_this) {
    return function(response) {
      _this.plans = response.plans;
      return _this.activeRequest = false;
    };
  })(this));
};

return PlanService;

单元测试:

var planService;
beforeach(function() {
  module("notRealModuleName");
  inject(function(PlanService) {
    planService = PlanService;
  });
});

...(other tests)

it('should get a list of plans', function() {
  var $httpBackend;
  inject(function($injector) {
    $httpBackend = $injector.get('$httpBackend');
  });

  var plans = {"plans": [array of stuff goes here]};
  $httpBackend.whenGET('/plans/special').respond(plans);
  var promise = planService.getPlanList();

  promise.then(function(response) {
     expect(response).toBeDefined();
     expect(planService.plans).toBeDefined();
  });
  $httpBackend.flush();
});

执行此测试时,将返回错误Error: Unexpected request: GET http://ip_address/plans/special No more request expected。如果我注释掉httpBackend.flush,则测试通过。但是,如果我将expect(planService.plans)更改为不存在的方法,则不会失败。显然,期望没有被称为。这有什么问题?

1 个答案:

答案 0 :(得分:2)

错误:

Error: Unexpected request: GET http://ip_address/plans/postpaid No more request expected

表示实际上没有对该网址进行过调用,首先请仔细检查您测试的网址。

在测试中,为了执行承诺,你必须调用$ rootScope。$ digest(); (为了避免异步测试,与$ httpBackend上存在flush方法的方式相同),如果你添加测试应该失败,因为promise将被执行。