element-plus/packages/hooks/__tests__/use-form-item.spec.ts
jeremywu 19bc41f965
feat(hooks): extracting size injection for form items (#3383)
* feat(hooks): extracting size injection for form items

- Extract common code for form items
- Apply extracted code for el-button

* - Address import order

* Update packages/hooks/use-form-item/index.ts

Co-authored-by: 三咲智子 <sxzz@sxzz.moe>

* - Fix type annotation for fallbacks

* - Use MaybeRef to mark type of local fallbacks

Co-authored-by: 三咲智子 <sxzz@sxzz.moe>
2021-09-13 23:14:48 +08:00

117 lines
2.6 KiB
TypeScript

import { h, provide } from 'vue'
import { NOOP } from '@vue/shared'
import { mount } from '@vue/test-utils'
import { ElButton } from '@element-plus/components'
import {
elFormKey,
elFormItemKey,
elButtonGroupKey,
} from '@element-plus/tokens'
import type {
ElFormContext,
ElFormItemContext,
ElButtonGroupContext,
} from '@element-plus/tokens'
const AXIOM = 'Rem is the best girl'
const Component = {
render() {
return h(ElButton, this.$attrs, {
default: () => [AXIOM],
})
},
}
const mountComponent = (setup = NOOP, options = {}) => {
return mount(
{
...Component,
setup,
},
options
)
}
const getButtonVm = (wrapper: ReturnType<typeof mountComponent>) => {
return wrapper.findComponent(ElButton).vm as any as {
buttonSize: string
buttonDisabled: boolean
}
}
describe('use-form-item', () => {
it('should return local value', () => {
const wrapper = mountComponent()
expect(getButtonVm(wrapper).buttonSize).toBe('')
})
it('should return props.size instead of injected.size', () => {
const propSize = 'mini'
const wrapper = mountComponent(
() => {
provide(elFormItemKey, {
size: 'large',
} as ElFormItemContext)
},
{
props: {
size: propSize,
},
}
)
expect(getButtonVm(wrapper).buttonSize).toBe(propSize)
})
it('should return fallback.size instead inject.size', () => {
const fallbackSize = 'mini'
const wrapper = mountComponent(() => {
provide(elButtonGroupKey, {
size: fallbackSize,
} as ElButtonGroupContext)
provide(elFormItemKey, {
size: 'large',
} as ElFormItemContext)
})
expect(getButtonVm(wrapper).buttonSize).toBe(fallbackSize)
})
it('should return formItem.size instead form.size', () => {
const itemSize = 'mini'
const wrapper = mountComponent(() => {
provide(elFormItemKey, {
size: itemSize,
} as ElButtonGroupContext)
provide(elFormKey, {
size: 'large',
} as ElFormContext)
})
expect(getButtonVm(wrapper).buttonSize).toBe(itemSize)
})
// update this once useGlobalConfig is fixed
// it('should return global config when none is provided', () => {
// const size = 'mini'
// const wrapper = mountComponent(undefined, {
// global: {
// globalProperties: {
// $ELEMENT: {
// size,
// },
// },
// },
// })
// console.log(wrapper.vm.$data)
// expect(getButtonVm(wrapper).buttonSize).toBe(size)
// })
// Add test case for config provider
})