Mat*_*Mat 2 angularjs angularjs-directive
我有一个指令,在某些权限检查时删除了一个dom元素:
angular.module('app').directive('permissionNeeded', function ($location, $route, SecurityService) {
return {
restrict: 'A',
link: function (scope, element, attributes) {
var permissionNeeded = attributes.permissionNeeded;
if (permissionNeeded) {
if (SecurityService.checkAccess($route.current.name) !== permissionNeeded) {
element.remove();
}
}
}
};
});
Run Code Online (Sandbox Code Playgroud)
指令工作正常,但我无法测试.在我期望的断言之后,DOM操作(element.remove())似乎被触发:
it('should not do anything cos permissions are correct', function () {
$route.current = {
name: 'import'
}
var element = compileTemplate('<span permission-needed="W">Some content goes here</span>');
$rootScope.$digest();
expect(element.html()).toBe(''); // FAIL!!! it's still equals to 'Some Content goes here'
});
Run Code Online (Sandbox Code Playgroud)
我已经看到了关于使用$ timeout函数延迟期望断言的一些答案,但无论我尝试过什么断言失败(element.html()仍然等于'某些内容在这里')
然而,有趣的是(是吗?)如果我只是改变dom而不是在我的指令中删除它,我的测试就可以了:
angular.module('app').directive('permissionNeeded', function ($location, $route, SecurityService) {
return {
restrict: 'A',
link: function (scope, element, attributes) {
var permissionNeeded = attributes.permissionNeeded;
if (permissionNeeded) {
if (SecurityService.checkAccess($route.current.name) !== permissionNeeded) {
element.html('');
}
}
}
};
});
Run Code Online (Sandbox Code Playgroud)
使用上面的指令,测试正在通过.
当我在做断言时,我猜Dom渲染还没有结束,我是否正确?如果是这样,我可以做什么来延迟DOM渲染后的断言?
谢谢.
马修.
Los*_*ter 10
执行时element.remove(),它只从父项中删除元素,删除绑定事件等.
最简短的解决方案是将指令包含在父元素中:
var element = compileTemplate('<div><span permission-needed="W">Some content goes here</span></div>');
Run Code Online (Sandbox Code Playgroud)
然后
expect(element.html()).toBe('')
Run Code Online (Sandbox Code Playgroud)
将通过,因为element不再包含span了
| 归档时间: |
|
| 查看次数: |
5334 次 |
| 最近记录: |