I've just killed hours of my live trying to solve this. In a controller I call a method making an HTTP request on page load:
$scope.getPosts = function() { /* call to service */ };
/// Call it immediately
$scope.getPosts();
I expect this in my unit test:
$httpBackend.expectGET("/posts?bar=bar&foo=foo").respond(200, []);
But Karma reports
Error: Unexpected request: GET /posts?bar=bar&foo=foo
No more request expected in ...
That doesn't make any sense. I tried all combinations of when/where to call expectGET/create the controller in my tests but nothing helped. Then I realized I have another controller that fetches some data on page load and working tests for it. The difference is, a route parameter must be present for the HTTP request to happen. So I moved the call to
if ($routeParams.foo) {
$scope.getPosts();
}
and injected the foo param in the test. It passed! Obviously no-one wants the visitors to see such a thing in the URL. Using whenGET instead also makes it pass.
Can someone please help with solving this issue? I found one guy asking about this almost 2 years ago but he didn't get any answer (except mine which was deleted).