Improve this Doc View Source

A decorator for `$controller` with additional `bindings` parameter, useful when testing controllers of directives that use `bindToController`.

## Example

    // Directive definition ...

    myMod.directive('myDirective', {
      controller: 'MyDirectiveController',
      bindToController: {
        name: '@'
      }
    });

    // Controller definition ...

    myMod.controller('MyDirectiveController', ['log', function($log) {
      $log.info(this.name);
    })];

    // In a test ...

    describe('myDirectiveController', function() {
      it('should write the bound name to the log', inject(function($controller, $log) {
        var ctrl = $controller('MyDirective', { /* no locals */ }, { name: 'Clark Kent' });
        expect(ctrl.name).toEqual('Clark Kent');
        expect($log.info.logs).toEqual(['Clark Kent']);
      });
    });

## Usage

`$controller(constructor, locals, [bindings]);`

### Arguments

Param | Type | Details
--- | --- | ---
constructor | function()string | If called with a function then it's considered to be the controller constructor function. Otherwise it's considered to be a string which is used to retrieve the controller constructor using the following steps: check if a controller with given name is registered via `$controllerProvider` check if evaluating the string on the current scope returns a constructor if $controllerProvider#allowGlobals, check `window[constructor]` on the global `window` object (not recommended) The string can use the `controller as property` syntax, where the controller instance is published as the specified property on the `scope`; the `scope` must be injected into `locals` param for this to work correctly.
locals | Object | Injection locals for Controller.
bindings (optional) | Object | Properties to add to the controller before invoking the constructor. This is used to simulate the `bindToController` feature and simplify certain kinds of tests.

### Returns

Object | Instance of given controller.