Angularjs prometen no ser resueltos en prueba unitaria.

Estoy usando jazmín para probar en unidad un controlador angularjs que establece una variable en el alcance al resultado de llamar a un método de servicio que devuelve un objeto de promesa:

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

dentro del servicio

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

Esto funciona bien en el contexto de mi aplicación angularjs, pero no funciona en la prueba de la unidad de jazmín. He confirmado que la devolución de llamada "entonces" se está ejecutando en la prueba de la unidad, pero la promesa $ scope.myVar nunca se establece en el valor de retorno de la devolución de llamada.

Mi prueba de unidad:

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

Además, si cambio el controlador a lo siguiente, pasa la prueba de la unidad:

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

¿Por qué el valor del resultado de devolución de llamada de promesa no se propaga a $ scope.myVar en la prueba de la unidad? Vea el siguiente código jsfiddle para el código de trabajo completohttp://jsfiddle.net/s7PGg/5/

Respuestas a la pregunta(3)

Su respuesta a la pregunta