test(hooks): add testcase for use-media-query

This commit is contained in:
unix
2020-05-13 00:36:44 +08:00
parent 734f8a1d87
commit 00a4e0c620
3 changed files with 85 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
import { Utils } from 'components'
import { renderHook } from '@testing-library/react-hooks'
// @ts-ignore
import mediaQuery from 'css-mediaquery'
const { useMediaQuery } = Utils
const mediaListMock = (width: number) => {
;(window as any).listeners = [] as Array<Function>
return (query: string) => {
return {
matches: mediaQuery.match(query, { width }),
addListener: (fn: Function) => (window as any).listeners.push(fn),
removeListener: () => {},
}
}
}
describe('UseMediaQuery with SSR', () => {
beforeAll(() => {
;(window as any).matchMedia = undefined
})
it('should work correctly', () => {
const { result } = renderHook(() => useMediaQuery('xs'))
expect(result.current).toEqual(false)
})
it('should work correctly with ssr match', () => {
const ssrMatchMedia = (query: string) => ({
matches: mediaQuery.match(query, {
width: '100px',
}),
})
const { result } = renderHook(() =>
useMediaQuery('xs', {
ssrMatchMedia,
}),
)
expect(result.current).toEqual(true)
const { result: result2 } = renderHook(() =>
useMediaQuery('sm', {
ssrMatchMedia,
}),
)
expect(result2.current).toEqual(false)
})
})
describe('UseMediaQuery', () => {
beforeAll(() => {
;(window as any).matchMedia = mediaListMock(1500)
})
it('should work correctly', () => {
const { result } = renderHook(() => useMediaQuery('xs'))
expect(result.current).toEqual(false)
})
it('should hit', () => {
const { result } = renderHook(() => useMediaQuery('lg'))
expect(result.current).toEqual(true)
})
it('different match types should be supported', () => {
const { result } = renderHook(() =>
useMediaQuery('md', {
match: 'up',
}),
)
expect(result.current).toEqual(true)
const { result: result2 } = renderHook(() =>
useMediaQuery('md', {
match: 'down',
}),
)
expect(result2.current).toEqual(false)
})
})

View File

@@ -62,6 +62,7 @@
"@zeit-ui/react-icons": "^1.2.2",
"babel-jest": "^25.3.0",
"babel-loader": "^8.0.6",
"css-mediaquery": "^0.1.2",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.2",
"eslint": "^6.8.0",

View File

@@ -3124,6 +3124,11 @@ css-loader@3.5.3:
schema-utils "^2.6.6"
semver "^6.3.0"
css-mediaquery@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0"
integrity sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA=
css-select-base-adapter@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"