【发布时间】:2020-03-12 01:00:33
【问题描述】:
我有以下方法:
componentDidLoad() {
this.image = this.element.shadowRoot.querySelector('.lazy-img');
this.observeImage();
}
observeImage = () => {
if ('IntersectionObserver' in window) {
const options = {
rootMargin: '0px',
threshold: 0.1
};
this.observer = new window.IntersectionObserver(
this.handleIntersection,
options
);
this.observer.observe(this.image);
} else {
this.image.src = this.src;
}
};
我尝试像这样测试 IntersectionObserver.observe 调用:
it('should create an observer if IntersectionObserver is available', async () => {
await newSpecPage({
components: [UIImageComponent],
html: `<ui-image alt="Lorem ipsum dolor sit amet" src="http://image.example.com"></ui-image>`
});
const mockObserveFn = () => {
return {
observe: jest.fn(),
unobserve: jest.fn()
};
};
window.IntersectionObserver = jest
.fn()
.mockImplementation(mockObserveFn);
const imageComponent = new UIImageComponent();
imageComponent.src = 'http://image.example.com';
const mockImg = document.createElement('img');
mockImg.setAttribute('src', null);
mockImg.setAttribute('class', 'lazy-img');
imageComponent.element.shadowRoot['querySelector'] = jest.fn(() => {
return mockImg;
});
expect(imageComponent.image).toBeNull();
imageComponent.componentDidLoad();
expect(mockObserveFn['observe']).toHaveBeenCalled();
});
但不能让它工作,我的 mockObserveFn.observe 没有被调用,任何建议
【问题讨论】: