“remember kids, Jasmine likes to apply”
take a look at this AngularJs controller. Look at it.
as you can see, on line 18 there’s a call to fooService.bar() and two callbacks are used to handle the success and error cases.
Here instead, there’s an example of how you could test the error case:
in the beforeEach() block a mock service is created with a rejected promise (line 9) and on line 15 the controller is instantiated with the mocked dependencies.
On line 23 there’s the core of the test: a call to $scope.apply().
Without it the promise will not be resolved and any method chain will not be executed.
The reason is simple: the promises implementation is tied to the digest cycle, which is not handled by Jasmine. Calling $scope.apply() will update the internal status and take care of digest for you.