diff --git a/packages/components/select/__tests__/select.test.ts b/packages/components/select/__tests__/select.test.ts index cdaef942d1..d96e99d70e 100644 --- a/packages/components/select/__tests__/select.test.ts +++ b/packages/components/select/__tests__/select.test.ts @@ -477,6 +477,49 @@ describe('Select', () => { delete process.env.RUN_TEST_WITH_PERSISTENT }) + test('should not render the empty slot when multiple is true and persistent is false', async () => { + wrapper = _mount( + ` + + + + + + `, + () => ({ + options: [ + { + value: '选项1', + label: '黄金糕', + }, + { + value: '选项2', + label: '双皮奶', + }, + ], + value: [], + }) + ) + await nextTick() + const select = wrapper.findComponent({ name: 'ElSelect' }) + const selectVm = select.vm as any + expect(selectVm.selectedLabel).toStrictEqual([]) + await wrapper.find(`.${WRAPPER_CLASS_NAME}`).trigger('click') + const options = getOptions() + options[0].click() + await nextTick() + expect(selectVm.selectedLabel).toStrictEqual(['黄金糕']) + + const emptySlot = document.querySelector('.empty-slot') + expect(emptySlot).toBeNull() + }) + test('multiple is true and persistent is false', async () => { // This is convenient for testing the default value label rendering when persistent is false. process.env.RUN_TEST_WITH_PERSISTENT = 'true' diff --git a/packages/components/select/src/select.vue b/packages/components/select/src/select.vue index c661ad2513..a4fcc6e8ce 100644 --- a/packages/components/select/src/select.vue +++ b/packages/components/select/src/select.vue @@ -474,7 +474,7 @@ export default defineComponent({ watch( () => [slots.default?.(), modelValue.value], () => { - if (props.persistent) { + if (props.persistent || API.states.options.size > 0) { // If persistent is true, we don't need to manually render slots. return }