Co to dobry sposób, aby jednostka testowa izolowane zakresie w angularjsJak Jednostka badania samodzielnie dyrektywy zakresie, w angularjs
dyrektywa snippet
scope: {name: '=myGreet'},
link: function (scope, element, attrs) {
//show the initial state
greet(element, scope[attrs.myGreet]);
//listen for changes in the model
scope.$watch(attrs.myGreet, function (name) {
greet(element, name);
});
}
Chcę zapewnić dyrektywy jest słuchanie w przypadku zmian - nie działa ani w zakresie izolowanym:
it('should watch for changes in the model', function() {
var elm;
//arrange
spyOn(scope, '$watch');
//act
elm = compile(validHTML)(scope);
//assert
expect(scope.$watch.callCount).toBe(1);
expect(scope.$watch).toHaveBeenCalledWith('name', jasmine.any(Function));
});
UPDATE: Dostałem go do pracy, sprawdzając, czy oczekiwane obserwatorów zostały dodane do zakresu dziecięcej, ale jest bardzo kruchy i prawdopodobnie używając akcesorów w nieudokumentowany sposób (aka ulec zmianie bez uprzedzenia!).
//this is super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.scope().$$watchers[0].exp).toBe('name');
UPDATE 2: Jak już wspomniałem jest to kruchy! Pomysł nadal działa, ale w nowszych wersjach angularjs akcesor zmieniła od scope()
do isolateScope()
:
//this is STILL super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.isolateScope().$$watchers[0].exp).toBe('name');
Znalazłeś sposób na ustawienie szpiegostwo? – Tushar
@Tushar nie jest tak naprawdę, jak wcześniej, jest sposób, aby go uruchomić, ale może ulec zmianie bez powiadomienia, więc używaj na własne ryzyko. – daniellmb