Cách tốt để kiểm tra đơn vị phạm vi cô lập trong AngularJS là gì
JSFiddle hiển thị đơn vị thử nghiệm
Đoạn mã hướng dẫn
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);
});
}
Tôi muốn đảm bảo rằng chỉ thị đang lắng nghe các thay đổi - điều này không hoạt động với một phạm vi riêng biệt:
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));
});
CẬP NHẬT: Tôi đã bắt nó hoạt động bằng cách kiểm tra xem những người theo dõi dự kiến đã được thêm vào phạm vi con hay chưa, nhưng nó rất giòn và có thể đang sử dụng những người truy cập theo cách không có giấy tờ (còn có thể thay đổi mà không cần thông báo!).
//this is super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.scope().$$watchers[0].exp).toBe('name');
CẬP NHẬT 2:
Như tôi đã đề cập, loại này rất giòn! Ý tưởng vẫn hoạt động nhưng trong các phiên bản AngularJS mới hơn, trình truy cập đã thay đổi từ scope()
thành isolateScope()
:
//this is STILL super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.isolateScope().$$watchers[0].exp).toBe('name');