我正在使用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()将返回一个空字符串
任何想法?
非常感谢 利奥尔答案 0 :(得分:2)
根据$digest
(http://docs.angularjs.org/api/ng。$ rootScope.Scope)的文档,这只会处理当前范围及其子级的观察者等。
这向我建议,当您设置scope = $rootScope
然后$digest
时,您将处理$rootScope
上的观察者等,我认为这也是承诺将被解决的地方,释放您的模板。当您执行scope = $rootScope.$new()
并致电$digest
时,我预计$rootScope
发生的任何事情都不会发生。
那么,如果您将scope.$digest()
更改为$rootScope.$digest()
或scope.$apply()
,这会有效吗?