UNPKG

@wdio/image-comparison-core

Version:

Image comparison core module for @wdio/visual-service - WebdriverIO visual testing framework

80 lines (79 loc) 3.35 kB
import { describe, it, expect, vi, beforeEach } from 'vitest'; import scrollElementIntoView from './scrollElementIntoView.js'; describe('scrollElementIntoView', () => { let mockElement; let mockHtmlNode; let mockBodyNode; let mockStyleTag; let mockHead; beforeEach(() => { mockElement = { getBoundingClientRect: vi.fn().mockReturnValue({ top: 100 }), }; mockHtmlNode = { scrollTop: 0, get scrollHeight() { return 1000; }, get clientHeight() { return 500; }, }; mockBodyNode = { scrollTop: 0, get scrollHeight() { return 1000; }, get clientHeight() { return 500; }, }; mockStyleTag = { innerHTML: '', }; mockHead = { appendChild: vi.fn(), removeChild: vi.fn(), }; global.document = { documentElement: mockHtmlNode, body: mockBodyNode, createElement: vi.fn().mockReturnValue(mockStyleTag), head: mockHead, }; }); it('should scroll element into view when html node is scrollable', () => { const addressBarShadowPadding = 10; const result = scrollElementIntoView(mockElement, addressBarShadowPadding); expect(result).toBe(0); expect(mockHtmlNode.scrollTop).toBe(90); expect(mockHead.appendChild).toHaveBeenCalledWith(mockStyleTag); expect(mockHead.removeChild).toHaveBeenCalledWith(mockStyleTag); }); it('should scroll element into view when body node is scrollable', () => { Object.defineProperty(mockHtmlNode, 'scrollHeight', { value: 500 }); const addressBarShadowPadding = 10; const result = scrollElementIntoView(mockElement, addressBarShadowPadding); expect(result).toBe(0); expect(mockBodyNode.scrollTop).toBe(90); expect(mockHead.appendChild).toHaveBeenCalledWith(mockStyleTag); expect(mockHead.removeChild).toHaveBeenCalledWith(mockStyleTag); }); it('should return current scroll position when html node has scroll', () => { mockHtmlNode.scrollTop = 50; const addressBarShadowPadding = 10; const result = scrollElementIntoView(mockElement, addressBarShadowPadding); expect(result).toBe(50); expect(mockHtmlNode.scrollTop).toBe(90); }); it('should return current scroll position when body node has scroll', () => { mockHtmlNode.scrollTop = 0; mockBodyNode.scrollTop = 50; Object.defineProperty(mockHtmlNode, 'scrollHeight', { value: 500 }); const addressBarShadowPadding = 10; const result = scrollElementIntoView(mockElement, addressBarShadowPadding); expect(result).toBe(50); expect(mockBodyNode.scrollTop).toBe(90); }); it('should not scroll when neither html nor body is scrollable', () => { Object.defineProperty(mockHtmlNode, 'scrollHeight', { value: 500 }); Object.defineProperty(mockBodyNode, 'scrollHeight', { value: 500 }); const addressBarShadowPadding = 10; const result = scrollElementIntoView(mockElement, addressBarShadowPadding); expect(result).toBe(0); expect(mockHtmlNode.scrollTop).toBe(0); expect(mockBodyNode.scrollTop).toBe(0); }); });