Angularjs обещают не быть решенным в модульном тесте

Я использую jasmine для модульного тестирования контроллера angularjs, который устанавливает переменную в области видимости в результате вызова метода службы, который возвращает объект обещания:

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

внутри службы:

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

Это отлично работает в контексте моего приложения angularjs, но не работает в модульном тесте с жасмином. Я подтвердил, что обратный вызов «then» выполняется в модульном тесте, но обещание $ scope.myVar никогда не устанавливается равным возвращаемому значению обратного вызова.

Мой юнит тест:

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

Также, если я изменю контроллер на следующие прохождения модульного теста:

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

Почему значение результата обратного вызова обещания не распространяется на $ scope.myVar в модульном тесте? Смотрите следующий jsfiddle для полного рабочего кодаhttp://jsfiddle.net/s7PGg/5/

Ответы на вопрос(3)

Ваш ответ на вопрос