我正在使用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
}));
…
但是,如果我使用scope = $rootScope.$new(),element.html()将返回一个空字符串
有任何想法吗?
非常感谢
利奥尔
最佳答案 根据$digest(
http://docs.angularjs.org/api/ng. $rootScope.Scope)的文档,这只会处理当前范围及其子节点的观察者等.
这告诉我,当你设置scope = $rootScope然后$digest时,你将在$rootScope上处理观察者等,我认为这也是promises将被解决的地方,释放你的模板.当你执行scope = $rootScope.$new()并调用$digest时,我预计$rootScope中发生的任何事情都不会发生.
所以,如果你改变范围,这是否有效.$digest()到$rootScope.$digest()或范围.$apply()?