oooyaya oooyaya - 11 months ago 69
AngularJS Question

Angular httpBackend crashing browser

When using Jasmine and Angular (1.4.7) with Restangular (1.4.0), httpBackend and angular-mocks (1.4.7), Chrome and PhantomJS both crash when encountering the following line:


If I get rid of it entirely, as below, I get the following error:

scope.doSomething(); // will invoke a GET to /keepAlive

Error: Unexpected request: GET /something
No more request expected

The code that it is testing is:

$scope.doSomething = function () {'something').get();

I've tried everything I can think of. I'm down to the idea that this is just a bug in Karma/Jasmine/Restangular but I don't know how to work around it.

One thing worth noting is that httpBackend and Restangular disagree about the URL. Restangular adds the
. httpBackend doesn't. This is why they don't match.

Things I've tried that didn't work:

  • Calling /something from Restangular. Says unexpected GET //something
    (two slashes)

  • Using /something/another instead of a single root level
    directory. No difference.

  • using $http instead of Restangular. No difference.

Answer Source

Solved this a while ago. What happened is that the $httpBackend test caused a route change. That route change caused an event to fire and got us stuck in a loop.

However, this only happened when testing with $httpBackend. In the real world, this infinite loop didn't happen.

There were two solutions:

  1. redefine $location.go in your beforeEach() so that your testing will not actually cause a redirect -or -
  2. capture the event somehow and squash it, or just change your code to not trigger it