- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 AngularJS 中单元测试隔离范围的好方法是什么
指令片段
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);
});
}
我想确保指令正在监听更改 - 这不适用于隔离范围:
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));
});
更新:我通过检查是否将预期的观察者添加到子范围来让它工作,但它非常脆弱并且可能以未记录的方式使用访问器(也可能会更改,恕不另行通知!)。
//this is super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.scope().$$watchers[0].exp).toBe('name');
更新 2:正如我提到的,这很脆弱!这个想法仍然有效,但在较新版本的 AngularJS 中,访问器已从 scope()
更改为 isolateScope()
:
//this is STILL super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.isolateScope().$$watchers[0].exp).toBe('name');
最佳答案
参见 angular element api docs .如果您使用 element.scope(),您将获得您在指令的 scope 属性中定义的元素范围。如果您使用 element.isolateScope(),您将获得整个隔离范围。例如,如果您的指令看起来像这样:
scope : {
myScopeThingy : '='
},
controller : function($scope){
$scope.myIsolatedThingy = 'some value';
}
然后在您的测试中调用 element.scope() 将返回
{ myScopeThingy : 'whatever value this is bound to' }
但是如果你调用 element.isolateScope() 你会得到
{
myScopeThingy : 'whatever value this is bound to',
myIsolatedThingy : 'some value'
}
从 Angular 1.2.2 或 1.2.3 开始,这是正确的,不确定。在以前的版本中,您只有 element.scope()。
关于javascript - 如何在 AngularJS 中对独立作用域指令进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17371836/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!