首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getBoundingClientRect的模拟问题

getBoundingClientRect的模拟问题
EN

Stack Overflow用户
提问于 2019-08-30 17:23:15
回答 2查看 2.5K关注 0票数 0

如何模拟这行代码。我有一个带有任何类型主机属性的配置(即mockConfig)。但是它有html元素。这样我就可以使用querySelector和getBoundingClientRect方法了。但我不能嘲笑getBoundingClientRect。

代码语言:javascript
复制
//this.config.host='<div><i class="icon-dropdown"></i></div>'
..
const arrowHostLoc = (this.config.host as HTMLElement).querySelector('.icon-dropdown').getBoundingClientRect();

我正在使用的代码

代码语言:javascript
复制
  const mockConfig = {
    contentType: TestComponent,
    contentConfig: contentConfig,
    cssClass: 'rainbow',
    alignment: 'center',
    topPadding: 5,
    scrollListener: scrollSubject.asObservable(),
    host: { //type of any
      getBoundingClientRect: hostGetBoundClientRectSpy
    }
  } as IPopoverConfig;

--------------------

describe('xxx',()=>{
...
mockConfig.host = document.createElement('div');
spyOn('mockConfig.host.querySelector',['getBoundingClientRect']).and.returnValue(new DOMRect(0,0,0,0));
});

但是我作为TypeError: Cannot read property 'getBoundingClientRect' of null收到了错误。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-04 13:54:01

而不是

代码语言:javascript
复制
spyOn('mockConfig.host.querySelector',['getBoundingClientRect']).and.returnValue(new DOMRect(0,0,0,0));

我用过

代码语言:javascript
复制
spyOn(Element.prototype,['getBoundingClientRect']).and.callFake(
jasmine.createSpy('getBoundingClientRect').and.returnValue({ top: 1, height: 100, left: 2, width: 200, right: 202 })
);

这解决了我的问题。谢谢

票数 0
EN

Stack Overflow用户

发布于 2019-09-03 18:15:39

您的主机没有querySelectorquerySelector是未定义的,所以你也需要模拟它。

要么为主机显式提供HTMLElement的类型,以便它具有querySelector,要么像下面这样模拟它:

代码语言:javascript
复制
...
host :{
querySelector: {
 getBoundingClientRect: hostGetBoundClientRectSpy
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57723979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档