【问题标题】:How getDOM() works in Angular 2 specsgetDOM() 如何在 Angular 2 规范中工作
【发布时间】:2016-07-09 14:11:34
【问题描述】:

@angular/platform-browser/src/dom/dom_adapter 中的 getDOM() 在规范中是如何实际工作的?

看起来in some specs getDOM() 指的是一些分离的根元素,类似于AngularJS $rootElement

  var el1 = el('<div>a</div>');
  var el2 = el('<div>b</div>');
  getDOM().appendChild(el2, getDOM().firstChild(el1));
  expect(getDOM().childNodes(el2).length).toBe(2);

而在捆绑的Jasmine matchers getDOM() 神奇地指向同一个元素:

    function(actual: any /** TODO #???? */, className: any /** TODO #???? */) {
      return {
        pass: getDOM().hasClass(actual, className) == !isNot,
        get message() {
          return `Expected ${actual.outerHTML} ${isNot ? 'not ' : ''}
                  to contain the CSS class "${className}"`;
        }
      };
    };

为了方便起见,我正要构建一些 Chai 断言,但这让我觉得我遗漏了一些关于 Angular 2 在单元测试中的行为方式的重要内容。

那里发生了什么? getDOM() 上下文是如何设置的?这是什么背景?一次可以只有一个上下文吗? getDOM() 应该在生产代码中使用吗?

【问题讨论】:

    标签: javascript unit-testing typescript angular jasmine


    【解决方案1】:

    您不应该从 .../src/... 导入依赖项,因为这被认为是该包的私有实现。

    DomAdapter 仅供 Angular2 内部使用。

    它被导出为公共一段时间,但不久前从公共 API 中删除,这就是为什么有几个答案建议使用它的原因。

    【讨论】:

    • 所以我应该忽略内部匹配器引用它的原因并坚持使用常规 DOM,不是吗?
    • 没错。如果你想从 DOM 中完全抽象出来(这是 DomAdapter 通常用于的),你需要实现一个自定义的 Renderer 但这还没有很好的文档记录。
    • 好的,谢谢,我再仔细看看Renderer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 2018-06-30
    • 2017-05-22
    • 1970-01-01
    • 2020-01-20
    • 2010-10-10
    相关资源
    最近更新 更多