Jasmine 如何模拟 parentElement

Jasmine how mock parentElement

你好,我在测试中遇到了这个错误,我真的不知道如何解决它,我正在使用 Jasmine 和 Angular。

在指令中,我必须读取元素的父节点,但测试失败。知道如何模拟它吗?

这是代码

private getParentElement() {
    return this.element.nativeElement.closest('th');
  }

  private setActiveSortingCellOnLoad(): void {
    const selectors = "[name='arrows-sort-down'] , [name='arrows-sort-up']";
    const headerCells = this.getParentElement().parentElement.childNodes;
    headerCells.forEach(cell => {
      if (cell.childNodes.length > 0) {
        const el = cell.querySelectorAll(selectors);
        if (el.length === 1) {
          cell.classList.add(this.activeSortClass);
        }
      }
    });
  }

由于 getParentElement 是私有的,我们将不得不以一种骇人听闻的方式监视它。

尝试以下操作:

it('does abc', () => {
  spyOn((component as any), 'getParentElement').and.returnValue({ parentElement: { childNodes: [/* mock childNodes here */ ]}});
});

棘手的部分是 component as any,因为您无法监视私有方法。我认为以上应该可行。