4

我正在使用 Karma 和 Mocha 构建单元测试。测试我的指令,并使用 html2js(它将 html 转换为 $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() 将返回一个空字符串

有任何想法吗?

非常感谢 Lior

4

1 回答 1

2

根据$digesthttp://docs.angularjs.org/api/ng .$rootScope.Scope)的文档,这只会处理当前范围及其子范围的观察者等。

这向我表明,当您设置scope = $rootScope然后$digest您将在 上处理观察者等时$rootScope,我认为这也是解决承诺的地方,释放您的模板。当您这样做scope = $rootScope.$new()并调用它时,我希望不会发生$digest任何应该发生的事情。$rootScope

那么,如果您更改scope.$digest()$rootScope.$digest()or ,这是否有效scope.$apply()

于 2013-10-11T13:02:06.500 回答