From f84907ca3c97d2ef73a7f765b62478d0b8bdbdc8 Mon Sep 17 00:00:00 2001 From: JeremyWuuuuu <591449570@qq.com> Date: Wed, 29 Jul 2020 21:25:29 +0800 Subject: [PATCH] feat/card - add new component card and it's tests, docs --- packages/card/__tests__/card.spec.ts | 71 ++++++++++++++++++++++++++++ packages/card/doc/complex.vue | 19 ++++++++ packages/card/doc/index.stories.ts | 7 +++ packages/card/index.ts | 5 ++ packages/card/package.json | 12 +++++ packages/card/src/index.vue | 32 +++++++++++++ packages/element-plus/index.ts | 2 + packages/element-plus/package.json | 1 + 8 files changed, 149 insertions(+) create mode 100644 packages/card/__tests__/card.spec.ts create mode 100644 packages/card/doc/complex.vue create mode 100644 packages/card/doc/index.stories.ts create mode 100644 packages/card/index.ts create mode 100644 packages/card/package.json create mode 100644 packages/card/src/index.vue diff --git a/packages/card/__tests__/card.spec.ts b/packages/card/__tests__/card.spec.ts new file mode 100644 index 0000000000..9efae6e1f6 --- /dev/null +++ b/packages/card/__tests__/card.spec.ts @@ -0,0 +1,71 @@ +import { mount } from '@vue/test-utils' +import Card from '../src/index.vue' + +const AXIOM = 'Rem is the best girl' + +describe('Card.vue', () => { + test('render test', () => { + const wrapper = mount(Card, { + slots: { + default: AXIOM, + }, + }) + expect(wrapper.text()).toEqual(AXIOM) + }) + + test('string header', () => { + const header = 'I am header' + const wrapper = mount(Card, { + slots: { + default: AXIOM, + }, + props: { + header, + }, + }) + expect(wrapper.text()).toContain(header) + }) + + test('vnode header', () => { + const headerCls = 'header-text' + const btnCls = 'test-btn' + const wrapper = mount(Card, { + slots: { + default: AXIOM, + header: `
+ card header + +
`, + }, + }) + expect(wrapper.find('.header-text').exists()).toBe(true) + expect(wrapper.find('.test-btn').exists()).toBe(true) + }) + + test('body style', () => { + const style = 'font-size: 14px;' + const wrapper = mount(Card, { + props: { + slots: { + default: AXIOM, + }, + bodyStyle: style, + }, + }) + expect(wrapper.find('.el-card__body').attributes('style')).toBe(style) + }) + + test('shadow', () => { + const shadow = 'test-shadow' + const wrapper = mount(Card, { + props: { + slots: { + default: AXIOM, + }, + shadow, + }, + }) + + expect(wrapper.find(`.is-${shadow}-shadow`).exists()).toBe(true) + }) +}) diff --git a/packages/card/doc/complex.vue b/packages/card/doc/complex.vue new file mode 100644 index 0000000000..ec5a01a93c --- /dev/null +++ b/packages/card/doc/complex.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/card/doc/index.stories.ts b/packages/card/doc/index.stories.ts new file mode 100644 index 0000000000..20fe670d35 --- /dev/null +++ b/packages/card/doc/index.stories.ts @@ -0,0 +1,7 @@ +export default { + title: 'Card', +} + +export const BasicCard = () :string => 'basic card' +export const MinimalCard = (): string => 'minimal card with no header' +export { default as ComplexCard } from './complex.vue' diff --git a/packages/card/index.ts b/packages/card/index.ts new file mode 100644 index 0000000000..859883df64 --- /dev/null +++ b/packages/card/index.ts @@ -0,0 +1,5 @@ +import { App } from 'vue' +import Card from './src/index.vue' +export default (app: App): void => { + app.component(Card.name, Card) +} diff --git a/packages/card/package.json b/packages/card/package.json new file mode 100644 index 0000000000..2161ef5b19 --- /dev/null +++ b/packages/card/package.json @@ -0,0 +1,12 @@ +{ + "name": "@element-plus/card", + "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/card/src/index.vue b/packages/card/src/index.vue new file mode 100644 index 0000000000..f4f0673356 --- /dev/null +++ b/packages/card/src/index.vue @@ -0,0 +1,32 @@ + + diff --git a/packages/element-plus/index.ts b/packages/element-plus/index.ts index 999f4c2159..d34e1a82f9 100644 --- a/packages/element-plus/index.ts +++ b/packages/element-plus/index.ts @@ -1,6 +1,7 @@ import type { App } from 'vue' import ElButton from '@element-plus/button' import ElBadge from '@element-plus/badge' +import ElCard from '@element-plus/card' import ElTag from '@element-plus/tag' import ElDivider from '@element-plus/divider' @@ -11,6 +12,7 @@ export { export default function install(app: App): void { ElButton(app) ElBadge(app) + ElCard(app) ElTag(app) ElDivider(app) } diff --git a/packages/element-plus/package.json b/packages/element-plus/package.json index 2152600517..1d5f269b8b 100644 --- a/packages/element-plus/package.json +++ b/packages/element-plus/package.json @@ -16,6 +16,7 @@ "dependencies": { "@element-plus/badge": "^0.0.0", "@element-plus/button": "^0.0.0", + "@element-plus/card": "^0.0.0", "@element-plus/tag": "^0.0.0" } }