Improve this Doc  View Source

$controller

  1. - service in module ngMock

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('MyDirectiveController', { /* 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.