116 行
4.0 KiB
JavaScript
116 行
4.0 KiB
JavaScript
const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
|
|
const isAndroid = platformInfo.startsWith('android')
|
|
const isIos = platformInfo.startsWith('ios')
|
|
const isHarmony = platformInfo.startsWith('harmony')
|
|
const isApp = isAndroid || isIos || isHarmony
|
|
const PAGE_PATH = '/pages/template/pull-zoom-profile-page/pull-zoom-profile-page'
|
|
|
|
function parseScale(transform) {
|
|
const matched = transform.match(/scale\(([^)]+)\)/)
|
|
return matched ? parseFloat(matched[1]) : 1
|
|
}
|
|
|
|
function parseTranslateY(transform) {
|
|
const matched = transform.match(/translateY\(([-0-9.]+)px\)/)
|
|
return matched ? parseFloat(matched[1]) : 0
|
|
}
|
|
|
|
async function getTransformState(page) {
|
|
return await page.data('data')
|
|
}
|
|
|
|
describe('pull-zoom-profile-page', () => {
|
|
if (!isApp) {
|
|
it('not support', () => {
|
|
expect(1).toBe(1)
|
|
})
|
|
return
|
|
}
|
|
|
|
let page
|
|
|
|
async function scrollTo(scrollTop) {
|
|
const scrollView = await page.$('scroll-view')
|
|
expect(scrollView).not.toBeNull()
|
|
|
|
if (typeof scrollView.scrollTo == 'function') {
|
|
await scrollView.scrollTo(0, scrollTop)
|
|
} else {
|
|
await program.pageScrollTo(scrollTop)
|
|
}
|
|
await page.waitFor(500)
|
|
}
|
|
|
|
beforeAll(async () => {
|
|
page = await program.reLaunch(PAGE_PATH)
|
|
await page.waitFor('view')
|
|
await page.waitFor(1000)
|
|
})
|
|
|
|
beforeEach(async () => {
|
|
await scrollTo(0)
|
|
await page.callMethod('jest_applyScroll', 0)
|
|
await page.callMethod('jest_applyPulling', 0)
|
|
})
|
|
|
|
it('renders profile header and content list', async () => {
|
|
const username = await page.$('.username')
|
|
const slogan = await page.$('.slogan')
|
|
const avatar = await page.$('.avatar')
|
|
const items = await page.$$('.list-item')
|
|
|
|
expect(username).not.toBeNull()
|
|
expect(slogan).not.toBeNull()
|
|
expect(avatar).not.toBeNull()
|
|
expect(await username.text()).toBe('uni-app-x')
|
|
expect(await slogan.text()).toBe('一次开发,多端覆盖')
|
|
expect(items.length).toBe(30)
|
|
expect(await items[0].text()).toContain('1. 占位')
|
|
})
|
|
|
|
it('updates header wrapper and profile transforms while scrolling', async () => {
|
|
const headerWrapper = await page.$('.header-wrapper')
|
|
const userInfo = await page.$('.user-info')
|
|
|
|
await scrollTo(0)
|
|
expect(parseTranslateY(await headerWrapper.style('transform'))).toBe(0)
|
|
expect(parseScale(await userInfo.style('transform'))).toBeCloseTo(1, 2)
|
|
|
|
await scrollTo(80)
|
|
expect(parseTranslateY(await headerWrapper.style('transform'))).toBe(0)
|
|
expect(parseScale(await userInfo.style('transform'))).toBeCloseTo(0.7333, 2)
|
|
|
|
await scrollTo(120)
|
|
expect(parseTranslateY(await headerWrapper.style('transform'))).toBeGreaterThan(0)
|
|
expect(parseScale(await userInfo.style('transform'))).toBeCloseTo(0.7, 2)
|
|
})
|
|
|
|
it('caps profile shrink and restores transforms after scrolling back', async () => {
|
|
const headerWrapper = await page.$('.header-wrapper')
|
|
const userInfo = await page.$('.user-info')
|
|
|
|
await scrollTo(300)
|
|
expect(parseTranslateY(await headerWrapper.style('transform'))).toBeCloseTo(190, 0)
|
|
expect(parseScale(await userInfo.style('transform'))).toBeCloseTo(0.7, 2)
|
|
|
|
await scrollTo(0)
|
|
expect(parseTranslateY(await headerWrapper.style('transform'))).toBe(0)
|
|
expect(parseScale(await userInfo.style('transform'))).toBeCloseTo(1, 2)
|
|
})
|
|
|
|
it('scales both header images together while pulling', async () => {
|
|
await page.callMethod('jest_applyPulling', 50)
|
|
let state = await getTransformState(page)
|
|
const smallPullScale = parseScale(state.headerImgTransform)
|
|
expect(smallPullScale).toBeCloseTo(1.25, 2)
|
|
expect(parseScale(state.headerPullImgTransform)).toBeCloseTo(smallPullScale, 2)
|
|
|
|
await page.callMethod('jest_applyPulling', 100)
|
|
state = await getTransformState(page)
|
|
const largePullScale = parseScale(state.headerImgTransform)
|
|
expect(largePullScale).toBeGreaterThan(smallPullScale)
|
|
expect(largePullScale).toBeCloseTo(1.5, 2)
|
|
expect(parseScale(state.headerPullImgTransform)).toBeCloseTo(largePullScale, 2)
|
|
})
|
|
});
|