diff --git a/jest.config.js b/jest.config.js index 6d70016402..7f0a7d4ea5 100644 --- a/jest.config.js +++ b/jest.config.js @@ -7,6 +7,7 @@ module.exports = { }, }, }, + setupFiles: ['./jest.setup.js'], testPathIgnorePatterns: ['/node_modules/', 'dist'], modulePathIgnorePatterns: ['/node_modules/', 'dist'], testEnvironment: 'jsdom', diff --git a/jest.setup.js b/jest.setup.js new file mode 100644 index 0000000000..090d2ad68b --- /dev/null +++ b/jest.setup.js @@ -0,0 +1,4 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { config } = require('@vue/test-utils') + +config.global.stubs = {} diff --git a/package.json b/package.json index 2ae49a2c8f..f0444dc30a 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "@typescript-eslint/parser": "^4.31.2", "@vue/compiler-sfc": "^3.2.18", "@vue/component-compiler-utils": "^3.2.2", - "@vue/test-utils": "2.0.0-beta.4", + "@vue/test-utils": "2.0.0-rc.15", "algoliasearch": "^4.10.5", "chalk": "^4.1.2", "clipboard-copy": "^4.0.1", diff --git a/packages/components/infinite-scroll/__tests__/infinite-scroll.spec.ts b/packages/components/infinite-scroll/__tests__/infinite-scroll.spec.ts index c9a62c33cd..3a8ad3e6b3 100644 --- a/packages/components/infinite-scroll/__tests__/infinite-scroll.spec.ts +++ b/packages/components/infinite-scroll/__tests__/infinite-scroll.spec.ts @@ -76,7 +76,7 @@ afterAll(() => { }) afterEach(() => { - const app = document.querySelector('#app') + const app = document.querySelector('[data-v-app]') document.body.removeChild(app) }) diff --git a/packages/components/menu/__tests__/menu.spec.ts b/packages/components/menu/__tests__/menu.spec.ts index 2387f4406f..4bc29341cf 100644 --- a/packages/components/menu/__tests__/menu.spec.ts +++ b/packages/components/menu/__tests__/menu.spec.ts @@ -153,14 +153,14 @@ describe('menu', () => { }, } ) - const elSubMenu = wrapper.findComponent({ ref: 'subMenu' }) - const instance: any = elSubMenu.vm const button = wrapper.find('button') button.trigger('click') await nextTick() - expect(instance.opened).toBeTruthy() + + const elSubMenu = wrapper.findComponent({ ref: 'subMenu' }) + expect(elSubMenu.vm.$.exposed.opened).toBeTruthy() }) test('hover-background-color', async () => { diff --git a/packages/components/pagination/__tests__/pagination.spec.ts b/packages/components/pagination/__tests__/pagination.spec.ts index 032ee2a8f6..40bedf2c47 100644 --- a/packages/components/pagination/__tests__/pagination.spec.ts +++ b/packages/components/pagination/__tests__/pagination.spec.ts @@ -1,6 +1,7 @@ import { nextTick, ref, h } from 'vue' import { mount } from '@vue/test-utils' import Pagination from '../src/pagination' +import selectDropdownVue from '../../select/src/select-dropdown.vue' import type { VueWrapper } from '@vue/test-utils' const assertElementsExistence = ( @@ -332,7 +333,7 @@ describe('Pagination', () => { expect(currentPageWatcher).toHaveBeenCalled() await wrapper.find('.el-select').trigger('click') await wrapper - .getComponent('.el-select-dropdown') + .getComponent(selectDropdownVue) .find('li:nth-child(2)') .trigger('click') expect(pageSizeWatcher).toHaveBeenCalled() diff --git a/packages/components/popper/__tests__/popper.spec.ts b/packages/components/popper/__tests__/popper.spec.ts index 95cbd035c4..131ef75488 100644 --- a/packages/components/popper/__tests__/popper.spec.ts +++ b/packages/components/popper/__tests__/popper.spec.ts @@ -181,10 +181,10 @@ describe('Popper.vue', () => { disabled: true, appendToBody: false, }) + const $trigger = () => wrapper.find(`.${TEST_TRIGGER}`) - const $trigger = wrapper.find(`.${TEST_TRIGGER}`) expect(wrapper.find(selector).attributes('style')).toContain(DISPLAY_NONE) - await $trigger.trigger(MOUSE_ENTER_EVENT) + await $trigger().trigger(MOUSE_ENTER_EVENT) expect(wrapper.find(selector).attributes('style')).toContain(DISPLAY_NONE) @@ -192,7 +192,7 @@ describe('Popper.vue', () => { disabled: false, }) - await $trigger.trigger(MOUSE_ENTER_EVENT) + await $trigger().trigger(MOUSE_ENTER_EVENT) expect(wrapper.find(selector).attributes('style')).not.toContain( DISPLAY_NONE @@ -232,7 +232,7 @@ describe('Popper.vue', () => { const errorHandler = jest.fn() mount(Wrapped, { slots: { - trigger: undefined, + // trigger: undefined, }, global: { config: { diff --git a/packages/components/select/__tests__/select.spec.ts b/packages/components/select/__tests__/select.spec.ts index 11d03addb5..984e7e96e6 100644 --- a/packages/components/select/__tests__/select.spec.ts +++ b/packages/components/select/__tests__/select.spec.ts @@ -1343,6 +1343,11 @@ describe('Select', () => { selectInputEl.value = 'a' selectInput.trigger('input') await vm.$nextTick() + + const timer = sleep(300) + jest.runAllTimers() + await timer + expect(innerInputEl.placeholder).toBe('') selectInput.trigger('keydown', { diff --git a/packages/components/tabs/__tests__/tabs.spec.ts b/packages/components/tabs/__tests__/tabs.spec.ts index 6753509517..e582701f12 100644 --- a/packages/components/tabs/__tests__/tabs.spec.ts +++ b/packages/components/tabs/__tests__/tabs.spec.ts @@ -276,7 +276,7 @@ describe('Tabs.vue', () => { expect(panesWrapper.length).toEqual(2) // add one tab, check panes length and current tab - await navWrapper.find('.el-tabs__new-tab').trigger('click') + await wrapper.find('.el-tabs__new-tab').trigger('click') panesWrapper = wrapper.findAllComponents(TabPane) navItemsWrapper = navWrapper.findAll('.el-tabs__item') @@ -362,7 +362,7 @@ describe('Tabs.vue', () => { const navWrapper = wrapper.findComponent(TabNav) await nextTick() - await navWrapper.find('.el-tabs__new-tab').trigger('click') + await wrapper.find('.el-tabs__new-tab').trigger('click') let navItemsWrapper = navWrapper.findAll('.el-tabs__item') let panesWrapper = wrapper.findAllComponents(TabPane) diff --git a/packages/components/virtual-list/__tests__/fixed-size-grid.spec.ts b/packages/components/virtual-list/__tests__/fixed-size-grid.spec.ts index 099896c61b..7ac6a50315 100644 --- a/packages/components/virtual-list/__tests__/fixed-size-grid.spec.ts +++ b/packages/components/virtual-list/__tests__/fixed-size-grid.spec.ts @@ -153,7 +153,7 @@ describe('', () => { await nextTick() expect(wrapper.findAll(ITEM_SELECTOR)).toHaveLength(48) - expect(wrapper.find(ITEM_SELECTOR)).toEqual(prevFirstItem) + expect(wrapper.find(ITEM_SELECTOR).element).toEqual(prevFirstItem.element) }) it('should scrollToItem with correct alignment', async () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 553b7f1409..d8331439cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,7 +34,7 @@ importers: '@typescript-eslint/parser': ^4.31.2 '@vue/compiler-sfc': ^3.2.18 '@vue/component-compiler-utils': ^3.2.2 - '@vue/test-utils': 2.0.0-beta.4 + '@vue/test-utils': 2.0.0-rc.15 '@vueuse/core': ~6.1.0 algoliasearch: ^4.10.5 async-validator: ^4.0.3 @@ -119,7 +119,7 @@ importers: '@typescript-eslint/parser': 4.31.2_eslint@7.32.0+typescript@4.4.3 '@vue/compiler-sfc': 3.2.18 '@vue/component-compiler-utils': 3.2.2 - '@vue/test-utils': 2.0.0-beta.4_vue@3.2.18 + '@vue/test-utils': 2.0.0-rc.15_vue@3.2.18 algoliasearch: 4.10.5 chalk: 4.1.2 clipboard-copy: 4.0.1 @@ -176,7 +176,7 @@ importers: dependencies: '@vueuse/core': 6.4.1_vue@3.2.18 axios: 0.21.4 - element-plus: 1.1.0-beta.18_vue@3.2.18 + element-plus: 1.1.0-beta.19_vue@3.2.18 marked: 3.0.4 normalize.css: 8.0.1 nprogress: 0.2.0 @@ -2059,10 +2059,10 @@ packages: resolution: {integrity: sha512-vFa2annVlbI082ICC3BH239UFO66nn2Syxy9shI7N2haPrc4rFRyNuDjWKJRe3sX7py4yhYL7fopB5tWGwGVyA==} dev: true - /@vue/test-utils/2.0.0-beta.4_vue@3.2.18: - resolution: {integrity: sha512-uW3GdeEEQFTdRoYmBxxHs0ENpbt8jB6OeQ8JCiTuPQecP51dI8IcGXDJhzv7bjWG6Ej+KjaTxKEmEikCyhLWtQ==} + /@vue/test-utils/2.0.0-rc.15_vue@3.2.18: + resolution: {integrity: sha512-cb+Ri4PDRhtGCJuaLyl1HO9jXcwEj6AFwcNXace8FhhwelDzOdjyIgOb25xtDiUojzWjPuzGLKZQr/5WB7MLew==} peerDependencies: - vue: ^3.0.0-rc.10 + vue: ^3.0.1 dependencies: vue: 3.2.18 dev: true @@ -3847,8 +3847,8 @@ packages: resolution: {integrity: sha512-2jtSwgyiRzybHRxrc2nKI+39wH3AwQgn+sogQ+q814gv8hIFwrcZbV07Ea9f8AmK0ufPVZUvvAG1uZJ+obV4Jw==} dev: true - /element-plus/1.1.0-beta.18_vue@3.2.18: - resolution: {integrity: sha512-Q2cscYlpcbq/enuU/vlPLBP5K4bHkPakF6IkCiDrSgOkAr7XQYMem6QUOCRZ/8PFV0UnJRMyPJ7Xt0PKTFi8mg==} + /element-plus/1.1.0-beta.19_vue@3.2.18: + resolution: {integrity: sha512-eKJId8un12eoaL88lfLMBtDxRUJfrAQP3bav9p2QG2agOXu3cvYDGBtT773P0ZEm3/97t+itRbxYIYYLV4iNeQ==} peerDependencies: vue: ^3.2.0 dependencies: