TLDR; If don't think you should worry about that.
The only problem dealt with looong time ago was related to unit testing controller methods.
Let's say, in your unit tests you have something like this:
beforeEach inject ($injector)->
$controller = $injector.get '$controller'
injectables = { ... }
ctrl = $controller 'app.controllers.FooBarCtrl', injectables
describe 'Controller ...', ->
it 'should have foo property', ->
expect(ctrl.foo).toBeDefined()
And your controller looks like this:
name = 'app.controllers.FooBarCtrl'
angular.module(name, []).controller(name, [
'$scope'
'$http'
($scope)->
scope.foo = 'bar'
$http.get '/foo/bar', (res)-> console.log 'response: ', res
])
In this case, you wouldn't be able to test any controller methods, since what is returned is actually a promise. in order to gain access to actual controller methods you would need to return this, like here:
name = 'app.controllers.FooBarCtrl'
angular.module(name, []).controller(name, [
'$scope'
'$http'
($scope)->
scope.foo = 'bar'
$http.get '/foo/bar', (res)-> console.log 'response: ', res
@ # <--- look ma, I'm here!
])
However, I think these examples are not very relevant from practical point of view, since in unit testing angular controllers you should actually deal with the API provided with $scope and consider controller methods as private (implementation details).