Angularjs prometem não ser resolvido em teste unitário

Eu estou usando jasmine para teste de unidade um controlador angularjs que define uma variável no escopo para o resultado de chamar um método de serviço que retorna um objeto de promessa:

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

dentro do serviço:

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

Isso funciona bem no contexto do meu aplicativo angularjs, mas não funciona no teste da unidade de jasmim. Confirmei que o callback "then" está sendo executado no teste de unidade, mas a promessa $ scope.myVar nunca é definida como o valor de retorno do retorno de chamada.

Meu teste de unidade:

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" );
    } );
} );

Além disso, se eu mudar o controlador para o seguinte, o teste da unidade passa:

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

Por que o valor do resultado de retorno de chamada da promessa não está sendo propagado para $ scope.myVar no teste de unidade? Veja o seguinte jsfiddle para o código de trabalho completohttp://jsfiddle.net/s7PGg/5/

questionAnswers(3)

yourAnswerToTheQuestion