I am not sure, but did you try shadowing the $controllerProvider? It
is used to instantiate, but also to register controllers, so maybe, in
your test, you could wrap the service, so all the registrations would
go through your "man-in-the-middle" exposing constructors to you.

BTW: for historical reasons, the controller pointer can be also a
global constructor function instead of a string, so you could also
implement this. See source code for reference.

Regards,
Witold Szczerba

2014-04-14 18:36 GMT+02:00 Michael Kelly <[email protected]>:
> You make a good point. And in truth, my primary interest is not in verifying
> what's injected. I'm exploring the creation of a jasmine extension that will
> greatly assist in the creation of mocks for all dependencies injected into
> controllers, services, filters, etc.
>
> The concept is this:
>
> * mock all dependencies,
> * in your "given" statements, specify how these mocks will respond when
> called,
> * only in your "then" statements do you passThrough to the actual code.
>
> This gives the code under test total isolation, and forces your tests to be
> explicit about the conditions for the test. If you follow the AngularJS
> mandate that dependencies be injected, and you have access to those
> dependencies in the setup for the test, then you should be able to mock all
> dependencies with a single line of code. Something like:
>
>      dep = spyOnControllerDependencies(MyController);
>
> Where "dep" is an object containing the mocked/spied on dependencies.
>
> Perhaps I should have been more forthcoming at the get go, but I was worried
> about verging into tl;dr territory.
>
> -michael
>
>
> On Monday, April 14, 2014 8:56:10 AM UTC-7, Witold Szczerba wrote:
>>
>> Hi,
>> why would you need this? Testing if something was injected into
>> controller sounds like an anti-pattern. Who cares how was the
>> controller created if it can (green light) or cannot (red light) do
>> it's job?
>>
>> Regards,
>> Witold Szczerba
>>
>> 2014-04-13 22:42 GMT+02:00 Michael Kelly <[email protected]>:
>> > I'd like to be able to verify what's being injected into my controller,
>> > and
>> > further, to use that information in additional tests.
>> >
>> > I'd expect to be able to do something like this:
>> >
>> >     var app = angular.module('MyApp',[]);
>> >     app.controller('MyController', ['$scope', '$q', function($scope, $q)
>> > {
>> >         $scope.myFn = function () {};
>> >     }]);
>> >
>> >     describe('MyController', function () {
>> >
>> >         it('should require $scope and $q', function () {
>> >
>> > expect(app.controller("MyController").requires).toBe(['$scope',
>> > '$q']);
>> >         });
>> >
>> >     });
>> >
>> > But when I execute this test I get:
>> >
>> >     Expected [  ] to be [ '$scope', '$q' ]
>> >
>> > Any help would be appreciated,
>> >
>> > -michael
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups
>> > "AngularJS" group.
>> > To unsubscribe from this group and stop receiving emails from it, send
>> > an
>> > email to [email protected].
>> > To post to this group, send email to [email protected].
>> > Visit this group at http://groups.google.com/group/angular.
>> > For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "AngularJS" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/angular.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to