2013-06-19 34 views
4

我正在使用Karma和Mocha构建单元测试。测试我的指令,并使用html2js(它将htmls转换为$ templateCache中的缓存字符串)。 有趣的是,在我的测试中使用$ rootScope。$ new()时,模板html不会进入指令。下面的代码:

it('should show a thumb name', function() { 
    inject(function($compile, $rootScope,$controller) { 

    var scope = $rootScope;//.$new() ($new not working. Why?) 
    var linkFn = $compile('<thumb></thumb>'); 
    var element = linkFn(scope); 
    scope.$digest(); // <== needed so that $templateCache will bring the html 
        //  (that html2js put in it)  
    console.log(element.html());// correctly returns thumb's directive templateUrl content 
})); 

...

然而,如果我使用范围= $ rootScope $新的(),该element.html()将返回一个空字符串

有任何想法吗?

千恩万谢 利奥尔

+1

您需要提供所有的代码。测试中其他地方是否定义了元素? thumb是一个指令吗? – matsko

回答

2

按照文档的$digesthttp://docs.angularjs.org/api/ng。$ rootScope.Scope),这将只处理观察家等为当前范围和它的孩子。

这向我建议,当你设置scope = $rootScope然后$digest你将在$rootScope上处理观察者等,我认为这也是解决承诺的地方,释放你的模板。当你做scope = $rootScope.$new()并致电$digest时,我期望$rootScope发生的任何事情都不会发生。

那么,如果将scope.$digest()更改为$rootScope.$digest()scope.$apply(),那么这是否工作?

+0

嗯...有趣。你可能是对的。我必须检查。谢谢! – Lior

+0

在编写该答案后不确定'$ apply',所以我检查了代码以确保它调用'$ rootScope'上的摘要。 - 它确实,而不是现在。 – Andyrooger

+0

你是否设法让这个工作到最后? – Andyrooger

相关问题