123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- import { nextTick } from 'vue'
- import { mount } from '@vue/test-utils'
- import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest'
- import defineGetter from '@element-plus/test-utils/define-getter'
- import makeScroll from '@element-plus/test-utils/make-scroll'
- import Affix from '../src/affix.vue'
- import type { VNode } from 'vue'
- let clientHeightRestore: () => void
- const _mount = (render: () => VNode) => {
- return mount(render, { attachTo: document.body })
- }
- const AXIOM = 'Rem is the best girl'
- beforeAll(() => {
- clientHeightRestore = defineGetter(
- window.HTMLElement.prototype,
- 'clientHeight',
- 1000,
- 0
- )
- })
- afterAll(() => {
- clientHeightRestore()
- })
- describe('Affix.vue', () => {
- test('render test', async () => {
- const wrapper = _mount(() => <Affix>{AXIOM}</Affix>)
- await nextTick()
- expect(wrapper.text()).toEqual(AXIOM)
- const mockAffixRect = vi
- .spyOn(wrapper.find('.el-affix').element, 'getBoundingClientRect')
- .mockReturnValue({
- height: 40,
- width: 1000,
- top: -100,
- bottom: -80,
- } as DOMRect)
- const mockDocumentRect = vi
- .spyOn(document.documentElement, 'getBoundingClientRect')
- .mockReturnValue({
- height: 200,
- width: 1000,
- top: 0,
- bottom: 200,
- } as DOMRect)
- expect(wrapper.find('.el-affix--fixed').exists()).toBe(false)
- await makeScroll(document.documentElement, 'scrollTop', 200)
- expect(wrapper.find('.el-affix--fixed').exists()).toBe(true)
- mockAffixRect.mockRestore()
- mockDocumentRect.mockRestore()
- })
- test('should render offset props', async () => {
- const wrapper = _mount(() => <Affix offset={30}>{AXIOM}</Affix>)
- await nextTick()
- const mockAffixRect = vi
- .spyOn(wrapper.find('.el-affix').element, 'getBoundingClientRect')
- .mockReturnValue({
- height: 40,
- width: 1000,
- top: -100,
- bottom: -80,
- } as DOMRect)
- const mockDocumentRect = vi
- .spyOn(document.documentElement, 'getBoundingClientRect')
- .mockReturnValue({
- height: 200,
- width: 1000,
- top: 0,
- bottom: 200,
- } as DOMRect)
- await makeScroll(document.documentElement, 'scrollTop', 200)
- expect(wrapper.find('.el-affix--fixed').exists()).toBe(true)
- expect(wrapper.find('.el-affix--fixed').attributes('style')).toContain(
- 'top: 30px;'
- )
- mockAffixRect.mockRestore()
- mockDocumentRect.mockRestore()
- })
- test('should render position props', async () => {
- const wrapper = _mount(() => (
- <Affix position="bottom" offset={20}>
- {AXIOM}
- </Affix>
- ))
- await nextTick()
- const mockAffixRect = vi
- .spyOn(wrapper.find('.el-affix').element, 'getBoundingClientRect')
- .mockReturnValue({
- height: 40,
- width: 1000,
- top: 2000,
- bottom: 2040,
- } as DOMRect)
- const mockDocumentRect = vi
- .spyOn(document.documentElement, 'getBoundingClientRect')
- .mockReturnValue({
- height: 200,
- width: 1000,
- top: 0,
- bottom: 200,
- } as DOMRect)
- await makeScroll(document.documentElement, 'scrollTop', 0)
- expect(wrapper.find('.el-affix--fixed').exists()).toBe(true)
- expect(wrapper.find('.el-affix--fixed').attributes('style')).toContain(
- 'bottom: 20px;'
- )
- mockAffixRect.mockRestore()
- mockDocumentRect.mockRestore()
- })
- test('should render target props', async () => {
- const wrapper = _mount(() => (
- <>
- <div class="target" style="height: 200px">
- <Affix target=".target">{AXIOM}</Affix>
- </div>
- <div style="height: 1000px"></div>
- </>
- ))
- await nextTick()
- const mockAffixRect = vi
- .spyOn(wrapper.find('.el-affix').element, 'getBoundingClientRect')
- .mockReturnValue({
- height: 40,
- width: 1000,
- top: -100,
- bottom: -60,
- } as DOMRect)
- const mockTargetRect = vi
- .spyOn(wrapper.find('.target').element, 'getBoundingClientRect')
- .mockReturnValue({
- height: 200,
- width: 1000,
- top: -100,
- bottom: 100,
- } as DOMRect)
- await makeScroll(document.documentElement, 'scrollTop', 100)
- expect(wrapper.find('.el-affix--fixed').exists()).toBe(true)
- mockAffixRect.mockReturnValue({
- height: 40,
- width: 1000,
- top: -300,
- bottom: -260,
- } as DOMRect)
- mockTargetRect.mockReturnValue({
- height: 40,
- width: 1000,
- top: -300,
- bottom: -260,
- } as DOMRect)
- await makeScroll(document.documentElement, 'scrollTop', 300)
- expect(wrapper.find('.el-affix--fixed').exists()).toBe(false)
- mockAffixRect.mockRestore()
- mockTargetRect.mockRestore()
- })
- test('should render z-index props', async () => {
- const wrapper = _mount(() => <Affix zIndex={1000}>{AXIOM}</Affix>)
- await nextTick()
- const mockAffixRect = vi
- .spyOn(wrapper.find('.el-affix').element, 'getBoundingClientRect')
- .mockReturnValue({
- height: 40,
- width: 1000,
- top: -100,
- bottom: -80,
- } as DOMRect)
- const mockDocumentRect = vi
- .spyOn(document.documentElement, 'getBoundingClientRect')
- .mockReturnValue({
- height: 200,
- width: 1000,
- top: 0,
- bottom: 200,
- } as DOMRect)
- await makeScroll(document.documentElement, 'scrollTop', 200)
- expect(wrapper.find('.el-affix--fixed').exists()).toBe(true)
- expect(wrapper.find('.el-affix--fixed').attributes('style')).toContain(
- 'z-index: 1000;'
- )
- mockAffixRect.mockRestore()
- mockDocumentRect.mockRestore()
- })
- })
|