2014-12-01 73 views
2

我已经用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实际上将它改为了什么?

+1

编译后你在做'$ digest()'吗?做一个摘要,然后尝试一个'compiledTemplate.children('li')'(将'scope.foos'作为一个数组),看看你是否还没有收到任何东西。 – user2943490 2014-12-01 22:23:55

+0

谢谢!在汇编之后移动$摘要似乎已经成功了。我不明白那是它去的地方。 – 2014-12-01 22:33:49

+1

@ user2943490你应该添加你的答案来“关闭”这个问题;) – glepretre 2014-12-03 18:50:52

回答

3

在编译之后,你应该做一个$digest()。摘要后,compiledTemplate.find('ol')(与scope.foos作为一些数组)应该返回ng重复的元素。