From e35d38fc077ef379f20e3266f19be18c1efb0a7d Mon Sep 17 00:00:00 2001 From: panyongxu Date: Mon, 29 Nov 2021 02:05:40 +0800 Subject: [PATCH 1/4] =?UTF-8?q?test(readTip):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=EF=BC=8C=E5=B9=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=BB=84=E4=BB=B6=E7=8A=B6=E6=80=81=E4=B8=BA=E5=B7=B2?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__tests__/__snapshots__/card.spec.ts.snap | 39 +++++ packages/devui-vue/devui/package.json | 6 + .../__tests__/read-tip-template.spec.ts | 160 ++++++++++++++++++ .../devui/read-tip/__tests__/read-tip.spec.ts | 92 +++++++++- packages/devui-vue/devui/read-tip/index.ts | 2 +- .../devui/read-tip/src/read-tip-template.tsx | 3 +- .../devui-vue/devui/read-tip/src/read-tip.tsx | 3 +- .../docs/components/read-tip/index.md | 9 +- packages/devui-vue/package.json | 2 +- 9 files changed, 303 insertions(+), 13 deletions(-) create mode 100644 packages/devui-vue/devui/card/__tests__/__snapshots__/card.spec.ts.snap create mode 100644 packages/devui-vue/devui/package.json create mode 100644 packages/devui-vue/devui/read-tip/__tests__/read-tip-template.spec.ts diff --git a/packages/devui-vue/devui/card/__tests__/__snapshots__/card.spec.ts.snap b/packages/devui-vue/devui/card/__tests__/__snapshots__/card.spec.ts.snap new file mode 100644 index 00000000..76e8d750 --- /dev/null +++ b/packages/devui-vue/devui/card/__tests__/__snapshots__/card.spec.ts.snap @@ -0,0 +1,39 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`card should render correctly 1`] = ` +
+ +
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+`; diff --git a/packages/devui-vue/devui/package.json b/packages/devui-vue/devui/package.json new file mode 100644 index 00000000..a82d3d1f --- /dev/null +++ b/packages/devui-vue/devui/package.json @@ -0,0 +1,6 @@ +{ + "devDependencies": { + "@types/jest": "^27.0.3", + "@types/mocha": "^9.0.0" + } +} diff --git a/packages/devui-vue/devui/read-tip/__tests__/read-tip-template.spec.ts b/packages/devui-vue/devui/read-tip/__tests__/read-tip-template.spec.ts new file mode 100644 index 00000000..aaab9d60 --- /dev/null +++ b/packages/devui-vue/devui/read-tip/__tests__/read-tip-template.spec.ts @@ -0,0 +1,160 @@ +import { mount } from '@vue/test-utils'; +import { ReadTip, } from '../index'; +import { nextTick } from 'vue' +import TipsTemplate from '../src/read-tip-template'; + + +describe('read-tip test', () => { + + beforeEach(() => { + // create teleport target + const el = document.createElement('div') + el.id = 'readtip-target' + document.body.appendChild(el) + }) + + afterEach(() => { + // clean up + document.body.outerHTML = '' + }) + it('read-tip init render', async () => { + // 基础用法 + + const defaultTemplateProps = { + position: 'top', + appendToBody: false, + selector: '#readtip-target', + title: 'Name: Jack', + content: 'This is Jack\'s profile', + } + const wrapper = mount(TipsTemplate, { + props: { + defaultTemplateProps + } + }) + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).toContain(defaultTemplateProps.title) + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).toContain(defaultTemplateProps.content) + + + }) + + const position = ['top', 'left', 'right', 'bottom'] + + position.forEach(pos => { + it(`read-tip position ${pos}`, async () => { + // 基础用法 + + const defaultTemplateProps = { + position: pos, + appendToBody: false, + selector: '#readtip-target', + title: 'Name: Jack', + content: 'This is Jack\'s profile', + } + const wrapper = mount(TipsTemplate, { + props: { + defaultTemplateProps + } + }) + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).toContain('read-tip-container ' + defaultTemplateProps.position) + + }) + }) + + it('read-tip appendToBody = true', async () => { + // 基础用法 + + const defaultTemplateProps = { + position: 'top', + appendToBody: true, + selector: '#readtip-target', + title: 'Name: Jack', + content: 'This is Jack\'s profile', + } + const wrapper = mount(TipsTemplate, { + props: { + defaultTemplateProps + } + }) + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).toBe('') + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).not.toContain(defaultTemplateProps.title) + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).not.toContain(defaultTemplateProps.content) + + + }) + + it('read-tip contentTemplate', async () => { + // 基础用法 + + const defaultTemplateProps = { + position: 'top', + appendToBody: false, + selector: '#readtip-target', + contentTemplate: true + } + const wrapper = mount(TipsTemplate, { + props: { + defaultTemplateProps + }, + slots: { + default: `
I am test
` + } + }) + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).toContain('
I am test
') + + + }) + + it('read-tip dataFn', async () => { + // 基础用法 + + const defaultTemplateProps = { + appendToBody: false, + selector: '#readtip-target', + dataFn: getDataFromDB, + key: 'GetData' + } + function getDataFromDB({ element, rule }) { + return { content: element.innerHTML, title: rule.key } + } + const wrapper = mount(TipsTemplate, { + props: { + defaultTemplateProps + }, + + }) + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).toContain('GetData') + }) + + it('read-tip overlayClassName', async () => { + // 基础用法 + const defaultTemplateProps = { + appendToBody: false, + selector: '#readtip-target', + dataFn: getDataFromDB, + key: 'GetData', + overlayClassName: 'red' + } + function getDataFromDB({ element, rule }) { + return { content: element.innerHTML, title: rule.key } + } + const wrapper = mount(TipsTemplate, { + props: { + defaultTemplateProps + }, + + }) + + expect(document.querySelector(defaultTemplateProps.selector).innerHTML).toContain(defaultTemplateProps.overlayClassName) + }) +}) + + diff --git a/packages/devui-vue/devui/read-tip/__tests__/read-tip.spec.ts b/packages/devui-vue/devui/read-tip/__tests__/read-tip.spec.ts index fae43c0e..e6bb1048 100644 --- a/packages/devui-vue/devui/read-tip/__tests__/read-tip.spec.ts +++ b/packages/devui-vue/devui/read-tip/__tests__/read-tip.spec.ts @@ -1,8 +1,96 @@ import { mount } from '@vue/test-utils'; -import { ReadTip, ReadTipDirective } from '../index'; +import { ReadTip, } from '../index'; +import { nextTick } from 'vue' +import Template from '../src/read-tip-template'; describe('read-tip test', () => { + beforeEach(() => { + // create teleport target + const el = document.createElement('div') + el.className = 'readtip-target' + document.body.appendChild(el) + }) + + afterEach(() => { + // clean up + document.body.outerHTML = '' + }) + it('read-tip init render', async () => { + // 基础用法 + const readTipOptions = { + trigger: 'hover', + rules: { + trigger: 'click', + position: 'top', + appendToBody: false, + selector: '.readtip-target', + title: 'Name: Jack', + content: 'This is Jack\'s profile', + }, + }; + const wrapper = mount(ReadTip, { + props: { + readTipOptions + }, + slots: { + default: `@Jack` + } + }) + + expect(wrapper.find('.readtip-target').classes()).toContain('readtip-target') + + // dom元素被点击 template会进行展示 + await wrapper.find('.readtip-target').trigger('click') + await nextTick() + + let template = wrapper.findComponent(Template) + + expect(template.exists()).toBe(true) + expect(wrapper.findAll('[data-test="todo"]')).toHaveLength(1) + + // body元素被点击 template会消失 + await document.body.click() + await nextTick() + + template = wrapper.findComponent(Template) + expect(template.exists()).toBe(false) + expect(wrapper.findAll('[data-test="todo"]')).toHaveLength(1) + }) + it('read-tip init render', async () => { - // todo + // 基础用法 + const readTipOptions = { + trigger: 'hover', + rules: { + trigger: 'hover', + selector: '.readtip-target', + title: 'Name: Jack', + content: 'This is Jack\'s profile', + }, + }; + const wrapper = mount(ReadTip, { + props: { + readTipOptions + }, + slots: { + default: ` + @Jack + @Mary + ` + } + }) + + + // dom元素被移入 template会进行展示 + await wrapper.find('.readtip-target').trigger('mouseover') + + expect(wrapper.findAll('[data-test="todo"]')).toHaveLength(2) + + // dom元素被移出 template会消失 + await wrapper.find('.readtip-target').trigger('mouseout') + await nextTick() + + expect(wrapper.findAll('[data-test="todo"]')).toHaveLength(2) + }) }) diff --git a/packages/devui-vue/devui/read-tip/index.ts b/packages/devui-vue/devui/read-tip/index.ts index 877133f1..4ccae88c 100644 --- a/packages/devui-vue/devui/read-tip/index.ts +++ b/packages/devui-vue/devui/read-tip/index.ts @@ -10,7 +10,7 @@ export { ReadTip, } export default { title: 'ReadTip 阅读提示', category: '反馈', - status: '50%', // TODO: 组件若开发完成则填入"已完成",并删除该注释 + status: '已完成', install(app: App): void { app.use(ReadTip as any) } diff --git a/packages/devui-vue/devui/read-tip/src/read-tip-template.tsx b/packages/devui-vue/devui/read-tip/src/read-tip-template.tsx index 10aa734e..ab725c8a 100644 --- a/packages/devui-vue/devui/read-tip/src/read-tip-template.tsx +++ b/packages/devui-vue/devui/read-tip/src/read-tip-template.tsx @@ -20,7 +20,8 @@ export default defineComponent({ const temp = ref(null); onMounted(() => { const domBounding = document.querySelector(query).getBoundingClientRect(); - const distance = 10; + + const distance = 10; let positionTop = 0; let positionLeft = 0; const targetDom = document.querySelector('.read-tip-container').getBoundingClientRect(); diff --git a/packages/devui-vue/devui/read-tip/src/read-tip.tsx b/packages/devui-vue/devui/read-tip/src/read-tip.tsx index cc9ad63f..0ba6cce6 100644 --- a/packages/devui-vue/devui/read-tip/src/read-tip.tsx +++ b/packages/devui-vue/devui/read-tip/src/read-tip.tsx @@ -19,7 +19,6 @@ export default defineComponent({ appendToBody: true, rules: { selector: null }, }; - const tempTop = ref(0) // 合并基础配置 const options = { ...defaultOptions, ...props.readTipOptions } const defaultSlot = ref(null) @@ -148,7 +147,7 @@ export default defineComponent({ {(refRules).map(rule => (
{rule.status && ( { diff --git a/packages/devui-vue/docs/components/read-tip/index.md b/packages/devui-vue/docs/components/read-tip/index.md index 19fe559b..7742abd8 100644 --- a/packages/devui-vue/docs/components/read-tip/index.md +++ b/packages/devui-vue/docs/components/read-tip/index.md @@ -22,7 +22,6 @@