我已经用PhantomJS和Chrome测试了这个。
继this question我试图访问生成的HTML代码中的单元测试噶:
it('Should do something', inject(function ($rootScope, $templateCache, $compile) {
var scope = $rootScope.$new();
scope.$digest();
var template = $templateCache.get('/app/views/mytemplate.html');
var compiler = $compile(template);
var compiledTemplate = compiler(scope);
console.log(compiledTemplate);
}));
什么我发现是,模板被获取正确,以及对应于原始的HTML文件在我的电脑上。但编译模板永远不会正确编译;基本上,Angular删除任何带ng标签的div,并用注释替换它们,而不管它们的值是什么。
例如,
<ol ng-repeat = "foo in foos">
<li>foo</li>
</ol>
将始终被替换为:
<!-- ngRepeat: foo in foos -->
即使我专门设置scope.foos
到在单元测试一些阵列。我曾尝试添加waitsFor和setTimeout方法来迫使Karma等待长达8秒,这仍然是我得到的行为。我也测试了CSS属性,并发现Karma正确设置它们。例如,ng-show或ng-hide div将具有预期的CSS属性,但对于应该修改已编译的HTML的指令,所有内容都将被替换为注释。
有什么办法在单元测试中获得HTML的Angular-modified DOM结构吗?也就是说,不仅仅是删除了角度div的HTML,而且Angular实际上将它改为了什么?
编译后你在做'$ digest()'吗?做一个摘要,然后尝试一个'compiledTemplate.children('li')'(将'scope.foos'作为一个数组),看看你是否还没有收到任何东西。 – user2943490 2014-12-01 22:23:55
谢谢!在汇编之后移动$摘要似乎已经成功了。我不明白那是它去的地方。 – 2014-12-01 22:33:49
@ user2943490你应该添加你的答案来“关闭”这个问题;) – glepretre 2014-12-03 18:50:52