Skip to content

Commit e86ff56

Browse files
committed
add tests
1 parent 0e1e4d5 commit e86ff56

File tree

2 files changed

+68
-6
lines changed

2 files changed

+68
-6
lines changed

packages/vuetify/src/components/VSelect/VSelect.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -426,17 +426,15 @@ export const VSelect = genericComponent<new <
426426
<>
427427
<select
428428
hidden
429-
multiple={ props.multiple || undefined }
429+
multiple={ props.multiple }
430430
name={ autocomplete.fieldName.value }
431431
>
432-
{ items.value.map((item, index) => (
432+
{ items.value.map(item => (
433433
<option
434-
key={ index }
434+
key={ item.value }
435435
value={ String(item.value) }
436436
selected={ selectedValues.value.includes(item.value) }
437-
>
438-
{ item.title }
439-
</option>
437+
/>
440438
))}
441439
</select>
442440

packages/vuetify/src/components/VSelect/__tests__/VSelect.spec.browser.tsx

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,70 @@ describe('VSelect', () => {
792792
expect(screen.getAllByCSS('.v-checkbox-btn input:checked')).toHaveLength(1)
793793
})
794794

795+
describe('native form submission', () => {
796+
const items = [
797+
{ title: 'Item 1', value: 1 },
798+
{ title: 'Item 2', value: 2 },
799+
{ title: 'Item 3', value: 3 },
800+
]
801+
802+
it('should include selected value in form data for single selection', async () => {
803+
let submittedData: FormData | null = null
804+
805+
render(() => (
806+
<form
807+
onSubmit={ e => {
808+
e.preventDefault()
809+
submittedData = new FormData(e.target as HTMLFormElement)
810+
}}
811+
>
812+
<VSelect
813+
name="select"
814+
items={ items }
815+
modelValue={ items[0] }
816+
/>
817+
<button type="submit">Submit</button>
818+
</form>
819+
))
820+
821+
const submitButton = screen.getByRole('button', { name: 'Submit' })
822+
await userEvent.click(submitButton)
823+
824+
expect(submittedData).not.toBeNull()
825+
expect(submittedData!.get('select')).toBe('1')
826+
})
827+
828+
it('should include selected values in form data for multiple selection', async () => {
829+
let submittedData: FormData | null = null
830+
831+
render(() => (
832+
<form
833+
onSubmit={ e => {
834+
e.preventDefault()
835+
submittedData = new FormData(e.target as HTMLFormElement)
836+
}}
837+
>
838+
<VSelect
839+
multiple
840+
name="select"
841+
items={ items }
842+
modelValue={[items[0], items[1]]}
843+
/>
844+
<button type="submit">Submit</button>
845+
</form>
846+
))
847+
848+
const submitButton = screen.getByRole('button', { name: 'Submit' })
849+
await userEvent.click(submitButton)
850+
851+
expect(submittedData).not.toBeNull()
852+
const select = submittedData!.getAll('select')
853+
expect(select).toHaveLength(2)
854+
expect(select).toContain('1')
855+
expect(select).toContain('2')
856+
})
857+
})
858+
795859
describe('Showcase', () => {
796860
generate({ stories })
797861
})

0 commit comments

Comments
 (0)