2017-05-08 8 views
0

テストファイル内:

describe('$rootScope', function() { 
    describe('$on', function() { 
     var credentials = "Basic abcd1234"; 
     var $scope; 
     var $rootScope; 
     var $httpBackend; 
     ... 
     beforeEach(inject(function($injector, $controller, _$rootScope_, $state, _$q_, currentUserService) { 
      $scope = _$rootScope_.$new(); 
      $rootScope = _$rootScope_; 
      $httpBackend.when('GET', 'dist/app/login/login.html').respond({'title': 'TEST_TITLE'}, {'A-Token': 'xxx'}); 
     })); 

     ... 
     it('should set $scope.title if noAuthorization', function() { 
      spyOn($rootScope, '$on'); 
      $controller('AppCtrl', {$scope: $scope}); 
      $rootScope.$broadcast("$stateChangeStart"); 
      $rootScope.$apply(); 

      expect($rootScope.$on).toHaveBeenCalled(); 
      expect($scope.title).toBe('TEST_TITLE'); 

     }); 
    }); 
}); 

$ scope.titleは私のテストでは常に定義されていません。期待は常に失敗します。私は$ emit、$ applyなどを試しました。これは$ rootScope.onメソッド内のコントローラ内にあります。

しかし、jsファイルの中に$ scope.titleを記録すると、$ scope.titleが更新されていることがわかります。

私もそれは私が実際のコードは、それがないので、それが仕事です示す必要があると感じていないだけでfunction updateTitle(...)

あり、それは$scope.updateTitleではありませんつまり、呼び出される関数は$スコープではないことを言及する必要があります。私は、なぜテストの$範囲が更新されていないのだろうと思っています。

答えて

-1

一言で言えば、スパイで.andCallThrough()を忘れないでください。ジャスミンのスパイにはandCallThrough()が必要でした。正しいスコープにアクセスするにはelement.scope()を使用してください。

spyOn(scope, '$apply').andCallThrough(); 
+0

運がありません。それは何もしません。私はcallThrough(()を$ onに、$ applyを入れました。それでも未定義です。 – Tai

関連する問題