From 2930afa650ca5662627ce126d686283b865fafad Mon Sep 17 00:00:00 2001 From: JeremyWuuuuu <591449570@qq.com> Date: Tue, 4 Aug 2020 22:40:00 +0800 Subject: [PATCH] feat(link): add link component and it's tests --- packages/element-plus/index.ts | 3 ++ packages/element-plus/package.json | 15 +++---- packages/link/__tests__/link.spec.ts | 49 ++++++++++++++++++++++ packages/link/doc/index.stories.ts | 20 +++++++++ packages/link/index.ts | 9 ++++ packages/link/package.json | 12 ++++++ packages/link/src/index.vue | 61 ++++++++++++++++++++++++++++ 7 files changed, 162 insertions(+), 7 deletions(-) create mode 100644 packages/link/__tests__/link.spec.ts create mode 100644 packages/link/doc/index.stories.ts create mode 100644 packages/link/index.ts create mode 100644 packages/link/package.json create mode 100644 packages/link/src/index.vue diff --git a/packages/element-plus/index.ts b/packages/element-plus/index.ts index 90645818c9..99e5675706 100644 --- a/packages/element-plus/index.ts +++ b/packages/element-plus/index.ts @@ -10,6 +10,7 @@ import ElTimeLine from '@element-plus/time-line' import ElProgress from '@element-plus/progress' import ElBreadcrumb from '@element-plus/breadcrumb' import ElIcon from '@element-plus/icon' +import ElLink from '@element-plus/link' export { ElAvatar, @@ -23,6 +24,7 @@ export { ElProgress, ElBreadcrumb, ElIcon, + ElLink, } export default function install(app: App): void { @@ -37,4 +39,5 @@ export default function install(app: App): void { ElProgress(app) ElBreadcrumb(app) ElIcon(app) + ElLink(app) } diff --git a/packages/element-plus/package.json b/packages/element-plus/package.json index 94d61ac221..f303977a2f 100644 --- a/packages/element-plus/package.json +++ b/packages/element-plus/package.json @@ -17,13 +17,14 @@ "@element-plus/avatar": "^0.0.0", "@element-plus/badge": "^0.0.0", "@element-plus/button": "^0.0.0", - "@element-plus/layout": "^0.0.0", - "@element-plus/card": "^0.0.0", - "@element-plus/tag": "^0.0.0", - "@element-plus/time-line": "^0.0.0", - "@element-plus/divider": "^0.0.0", - "@element-plus/progress": "^0.0.0", "@element-plus/breadcrumb": "^0.0.0", - "@element-plus/icon": "^0.0.0" + "@element-plus/card": "^0.0.0", + "@element-plus/divider": "^0.0.0", + "@element-plus/icon": "^0.0.0", + "@element-plus/layout": "^0.0.0", + "@element-plus/link": "^0.0.0", + "@element-plus/progress": "^0.0.0", + "@element-plus/tag": "^0.0.0", + "@element-plus/time-line": "^0.0.0" } } diff --git a/packages/link/__tests__/link.spec.ts b/packages/link/__tests__/link.spec.ts new file mode 100644 index 0000000000..5117b413d2 --- /dev/null +++ b/packages/link/__tests__/link.spec.ts @@ -0,0 +1,49 @@ +import { mount } from '@vue/test-utils' +import Link from '../src/index.vue' + +const AXIOM = 'Rem is the best girl' + +describe('Link.vue', () => { + test('render test', () => { + const wrapper = mount(Link, { + slots: { + default: AXIOM, + }, + }) + expect(wrapper.text()).toEqual(AXIOM) + }) + + test('it should handle click event when href were given and is not disabled', async () => { + const href = 'https://target.com' + const wrapper = mount(Link, { + slots: { + default: AXIOM, + }, + props: { + href, + }, + }) + + await wrapper.find('.el-link').trigger('click') + expect(wrapper.emitted('click')).toHaveLength(1) + }) + + test('it should disable click when it\'s disabled', async () => { + const href = 'https://target.com' + const wrapper = mount(Link, { + slots: { + default: AXIOM, + }, + props: { + href, + disabled: true, + }, + }) + + await wrapper.find('.el-link').trigger('click') + expect(wrapper.emitted('click')).toBeUndefined() + }) + + + +}) diff --git a/packages/link/doc/index.stories.ts b/packages/link/doc/index.stories.ts new file mode 100644 index 0000000000..157a7a66cb --- /dev/null +++ b/packages/link/doc/index.stories.ts @@ -0,0 +1,20 @@ +import ElLink from '../index' + +export default { + title: 'Link', +} + +const commonProps = 'href="https://vuejs.org" target="_blank" rel="noreferrer noopener" style="margin-right: 10px;"' + +export const BasicLinks = () => ` +normal link +primary link +success link +info link +warning link +error link +` + +export const DisabledLinks = () => ` +disabled link +` diff --git a/packages/link/index.ts b/packages/link/index.ts new file mode 100644 index 0000000000..31896ba8e7 --- /dev/null +++ b/packages/link/index.ts @@ -0,0 +1,9 @@ +import { App } from 'vue' +import Link from './src/index.vue' +export default (app: App): void => { + app.component(Link.name, Link) +} + +export { + Link, +} diff --git a/packages/link/package.json b/packages/link/package.json new file mode 100644 index 0000000000..35d102a65e --- /dev/null +++ b/packages/link/package.json @@ -0,0 +1,12 @@ +{ + "name": "@element-plus/link", + "version": "0.0.0", + "main": "dist/index.js", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0-rc.1" + }, + "devDependencies": { + "@vue/test-utils": "^2.0.0-beta.0" + } +} diff --git a/packages/link/src/index.vue b/packages/link/src/index.vue new file mode 100644 index 0000000000..bd4a572fcc --- /dev/null +++ b/packages/link/src/index.vue @@ -0,0 +1,61 @@ + + +