Obietnica Angularjs nie zostanie rozwiązana w teście jednostkowym

Używam jaśminu do testu jednostkowego kontrolera angularjs, który ustawia zmienną w zakresie na wynik wywołania metody usługi, która zwraca obiekt obietnicy:

var MyController = function($scope, service) {
    $scope.myVar = service.getStuff();
}

wewnątrz usługi:

function getStuff() {
    return $http.get( 'api/stuff' ).then( function ( httpResult ) {
        return httpResult.data;
    } );
}

Działa to dobrze w kontekście mojej aplikacji angularjs, ale nie działa w teście jednostek jaśminu. Potwierdziłem, że wywołanie zwrotne „then” jest wykonywane w teście jednostkowym, ale obietnica $ scope.myVar nigdy nie jest ustawiana na wartość zwrotną wywołania zwrotnego.

Mój test jednostkowy:

describe( 'My Controller', function () {
  var scope;
  var serviceMock;
  var controller;
  var httpBackend;

  beforeEach( inject( function ( $rootScope, $controller, $httpBackend, $http ) {
    scope = $rootScope.$new();
    httpBackend = $httpBackend;
    serviceMock = {
      stuffArray: [{
        FirstName: "Robby"
      }],

      getStuff: function () {
        return $http.get( 'api/stuff' ).then( function ( httpResult ) {
          return httpResult.data;
        } );
      }
    };
    $httpBackend.whenGET( 'api/stuff' ).respond( serviceMock.stuffArray );
    controller = $controller( MyController, {
      $scope: scope,
      service: serviceMock
    } );
  } ) );

  it( 'should set myVar to the resolved promise value',
    function () {
      httpBackend.flush();
      scope.$root.$digest();
      expect( scope.myVar[0].FirstName ).toEqual( "Robby" );
    } );
} );

Ponadto, jeśli zmienię kontroler na następujące testy jednostkowe:

var MyController = function($scope, service) {
    service.getStuff().then(function(result) {
        $scope.myVar = result;
    });
}

Dlaczego wartość wyniku wywołania zwrotnego obietnicy nie jest propagowana do $ scope.myVar w teście jednostkowym? Zobacz następujący jsfiddle, aby uzyskać pełny działający kodhttp://jsfiddle.net/s7PGg/5/

questionAnswers(3)

yourAnswerToTheQuestion