私の質問は非常に単純ですが、答えるのが難しいです...Googleクロージャーツールを使用して、テスト中のAngularJsコントローラーに $scope を挿入する方法。
コントローラーは非常に単純で、基本的に_getOrganisations
関数を介してサーバーへの http 要求を実行します。
実際のコントローラーは次のとおりです。
goog.provide 'MyModule.controllers.Menu'
MyModule.controllers.Menu = ($scope, $http, $location, SomeService) ->
_getOrganisations = () ->
$http({SomeRequestOptions})
.success(_handleGetOrganisationsSuccessCallback)
.error(_handleGetOrganisationsErrorCallback)
_handleGetOrganisationsSuccessCallback = (result, status) ->
$scope.organisations = result
_handleGetOrganisationsErrorCallback = (err, status) ->
[...]
$scope.toggleMenu = () ->
angular.element('.nav-collapse').collapse('toggle')
_getOrganisations()
コントローラーをテストしようとした方法は次のとおりです
describe 'menu controller', () =>
result=
org1 : ''
org2 : ''
org3 : ''
beforeEach () ->
goog.require 'MyModule.controllers.Menu'
inject ($rootScope, $controller, $http, $httpBackend) ->
scope = $rootScope.$new()
httpBackend = $httpBackend
httpBackend.whenGET({SomeRequestOptions}).respond result
menuController = $controller new MyModule.controllers.Menu(), {$scope : scope, $http : $http}
it 'should get organisations properly', () ->
expect(scope.organisations).toEqual(result)
実際のコントローラを menuController に割り当てようとすると、$scope が定義されていません... ここで何が欠けていますか?