[Javascript] Test a web component

import { WatermarkOverlay } from '../watermark-overlay'

describe('WatermarkOverlay', () => {
  let cmp: HTMLElement
  let fixture: HTMLElement
  let shadow: ShadowRoot | null | undefined

  customElements.define('test-watermarkoverlay', WatermarkOverlay)

  beforeEach(() => {
    Object.defineProperty(window, 'innerWidth', {
      writable: true,
      value: 1024,
    })

    Object.defineProperty(window, 'innerHeight', {
      writable: true,
      value: 768,
    })

    document.body.innerHTML = `<div id="fixture"><test-watermarkoverlay userId="testUserId" message="testMessage"></test-watermarkoverlay></div>`
    fixture = document.querySelector('#fixture')!
    cmp = document.querySelector('test-watermarkoverlay')!
    cmp.setAttribute('size', '1024:768')
    shadow = cmp?.shadowRoot
  })

  afterEach(() => {
    shadow = null
    fixture.remove()
  })

  test('should have the container', () => {
    const container = shadow?.querySelector('.zscaler__overlay--container')
    expect(container).toBeDefined()
    const styles = window.getComputedStyle(container!)
    const { zIndex } = styles
    expect(zIndex).toBe('99999999999999')
  })

  test('should have watermark div elements', () => {
    const container = shadow?.querySelector('.zscaler__overlay--container')
    const elms = container?.querySelectorAll('.zscaler__overlay--watermark')
    expect(elms?.length).toBeGreaterThan(0)

    const firstDiv = elms?.[0]
    expect(firstDiv?.innerHTML).toContain('testUserId')
    expect(firstDiv?.innerHTML).toContain('testMessage')
  })

  test('resize: if enlarge the window should increase the number of divs', (done) => {
    let container = shadow?.querySelector('.zscaler__overlay--container')
    let elms = container?.querySelectorAll('.zscaler__overlay--watermark')
    const pervNum = elms?.length || 0
    expect(pervNum).toBeGreaterThan(0)

    cmp.setAttribute('size', '2048:768')
    setTimeout(() => {
      container = shadow?.querySelector('.zscaler__overlay--container')
      elms = container?.querySelectorAll('.zscaler__overlay--watermark')
      const currentNum = elms?.length
      expect(currentNum).toBeGreaterThan(pervNum)
      done()
    }, 10)
  })

  test('resize: if narrow the window should NOT decrease the number of divs', (done) => {
    let container = shadow?.querySelector('.zscaler__overlay--container')
    let elms = container?.querySelectorAll('.zscaler__overlay--watermark')
    const pervNum = elms?.length || 0
    expect(pervNum).toBeGreaterThan(0)

    cmp.setAttribute('size', '768:768')
    setTimeout(() => {
      container = shadow?.querySelector('.zscaler__overlay--container')
      elms = container?.querySelectorAll('.zscaler__overlay--watermark')
      const currentNum = elms?.length
      expect(currentNum).toEqual(pervNum)
      done()
    }, 10)
  })

  test('should emit "watermarkRevmoed" event when remove the fixture', () => {
    const cb = jest.fn()
    cmp.addEventListener('watermarkRemoved', cb)
    fixture.remove()
    expect(cb).toHaveBeenCalled()
    expect(cb).toHaveBeenCalledTimes(1)
  })
})

 

posted @   Zhentiw  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-03-18 [Webpack] Externalize Dependencies to be Loaded via CDN with webpack
2019-03-18 [Webpack] Analyze a Production JavaScript Bundle with webpack-bundle-analyzer
2019-03-18 [Algorithm] Largest sum of non-adjacent numbers
2019-03-18 [Angular] Use ngx-build-plus to compile Angular Elements
2017-03-18 [Ramda] Get Deeply Nested Properties Safely with Ramda's path and pathOr Functions
2016-03-18 [Angular 2] Using events and refs
2016-03-18 [Angular 2] Writing a Simple Angular 2 Component
点击右上角即可分享
微信分享提示