2016-07-26 15 views
0

Blick auf einige JS Unit Testing mit Jasmin, innerhalb eines describe-Suite habe ich den folgenden Code gefunden:Dependency Injection in Angularjs mit beforeEach (inject (function (...) {..}));

describe("suiteName", function() { 

var $controller; 

beforeEach(inject(function(_$controller_) { 
    $controller = _$controller_; 
})); 

describe(....); 
describe(....); 


}); 

innerhalb der inneren beschreibt, wird die Variable $controller irgendwann innerhalb einiger spec it zu „binden“ verwendet Controller Felder Referenzen:

$controller('controllerUniqueName', { 

     controllerField1: reference1, 
     controllerField2: reference2, 
     ... 
} 

ich gehe davon aus, dass inject(..) eine Dependency Injection tut, sagt _$controller_ in globale Variable $controller und beforeEach Injektion nur um es zu tun, bevor jedes s Pecs it in jeder Beschreibungs-Suite, die folgt.

Kann jemand erklären, wie die Abhängigkeitsinjektion gelöst wird?

Insbesondere, was _$controller_ entspricht für die Zuordnung $controller = _$controller_;?

BEARBEITEN 1: Wenn ich den Injektionsblock entferne, schlägt der Komponententest mit der Nachricht TypeError: $controller is not a function fehl.

** EDIT 2: ** wenn ich _controller_ in something Unit-Test ändern schlägt mit Meldung Error: [$injector:unpr] Unknown provider: $somethingProvider <- $something

Antwort

1

_$controller_ zu $controller service instance entspricht.

Underscored Service-Aliase ist supported durch Schräg Injektor dieses Muster möglich zu machen:

var $controller; 
... 
$controller = _$controller_; 

Wenn something Dienst in geladener Module nicht existiert, wird [$injector:unpr] Unknown provider: $somethingProvider <- $something Fehler ausgelöst.