angularjs – 测试 – 如果使用$compile

我试图通过根据预定义范围编译视图并运行$scope $$digest来测试我的一个模板中的ng-if.

我发现编译的模板出来是一样的,不管我的情况是真实的还是假的.我会期望编译的html删除ng-if dom元素时,falsy.

beforeEach(module('templates'));
beforeEach(inject(function($injector,$rootScope){
    $compile = $injector.get('$compile');
    $templateCache = $injector.get('$templateCache');
    $scope = $rootScope.$new();
    template = angular.element($templateCache.get('myTemplate.tpl.html'));
}));

afterEach(function(){
    $templateCache.removeAll();
});

it ('my test',function(){
    $scope.myCondition = true;
    $compile(template)($scope);
    $scope.$digest();


    expect(template.text()).toContain("my dom text");
    // true and false conditions both have the same effect
});

这是一个plunkr试图显示发生了什么(不知道如何测试在plunkr,所以我在控制器中完成)http://plnkr.co/edit/Kjg8ZRzKtIlhwDWgB01R?p=preview

当ngIf放置在模板的根元素上时,会出现一个可能的问题.
ngIf删除节点并在其中放置注释.然后,它会观察表达式,并根据需要添加/删除实际的HTML元素.问题似乎是,如果它放置在模板的根元素上,那么一个注释就是从整个模板中留下的(即使只是暂时的),这被忽略了(我不知道这是否是浏览器 – 具体行为),导致一个空模板.

如果确实如此,您可以将您的ngIfed元素包含在< div&gt ;:::

<div><h1 ng-if="test">Hello,world !</h1></div>

另见这个short demo.

另一个可能的错误是以空白模板结尾,因为它不存在于$templateCache中.即如果你不把它放在$templateCache中,那么以下代码将返回undefined(产生一个空的元素):

$templateCache.get('myTemplate.tpl.html')

相关文章

AngularJS 是一个JavaScript 框架。它可通过 注:建议把脚本放在 元素的底部。这会提高网页加载速度,因...
angluarjs中页面初始化的时候会出现语法{{}}在页面中问题,也即是页面闪烁问题。出现这个的原因是:由于...
AngularJS 通过被称为指令的新属性来扩展 HTML。AngularJS 指令AngularJS 指令是扩展的 HTML 属性,带有...
AngularJS 使用表达式把数据绑定到 HTML。AngularJS 表达式AngularJS 表达式写在双大括号内:{{ expres...
ng-repeat 指令可以完美的显示表格。在表格中显示数据 {{ x.Name }} {{ x.Country }} 使用 CSS 样式为了...
$http是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。读取 JSON 文件下是存储在web服务器上...