From 3e0ac872c82867d87868b379d25b3875c00851f7 Mon Sep 17 00:00:00 2001 From: neverland Date: Wed, 6 Feb 2019 21:35:53 +0800 Subject: [PATCH] [improvement] ContactCard: functional (#2696) --- packages/contact-card/index.js | 27 ++++++++++++------------ packages/contact-card/test/index.spec.js | 26 ++++++++++++++++++----- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/packages/contact-card/index.js b/packages/contact-card/index.js index e86374739..35c3907d5 100644 --- a/packages/contact-card/index.js +++ b/packages/contact-card/index.js @@ -4,6 +4,8 @@ import Cell from '../cell'; const [sfc, bem, t] = use('contact-card'); export default sfc({ + functional: true, + props: { tel: String, name: String, @@ -18,28 +20,27 @@ export default sfc({ } }, - methods: { - onClick(event) { - if (this.editable) { - this.$emit('click', event); - } - } - }, + render(h, context, inherit) { + const { props, listeners } = context; + const { type, editable } = props; - render(h) { - const { type } = this; return ( { + if (editable && listeners.click) { + listeners.click(event); + } + }} + {...inherit} > {type === 'add' - ? this.addText || t('addText') - : [
{`${t('name')}:${this.name}`}
,
{`${t('tel')}:${this.tel}`}
]} + ? props.addText || t('addText') + : [
{`${t('name')}:${props.name}`}
,
{`${t('tel')}:${props.tel}`}
]}
); } diff --git a/packages/contact-card/test/index.spec.js b/packages/contact-card/test/index.spec.js index 15f167f29..4874af3a2 100644 --- a/packages/contact-card/test/index.spec.js +++ b/packages/contact-card/test/index.spec.js @@ -10,18 +10,34 @@ const contactInfo = { describe('ContactCard', () => { test('click event', () => { + const click = jest.fn(); const wrapper = mount(ContactCard, { - propsData: { - editable: false + context: { + on: { + click + } } }); wrapper.trigger('click'); - expect(wrapper.emitted('click')).toBeFalsy(); + expect(click.mock.calls.length).toEqual(1); + }); + + test('not editable', () => { + const click = jest.fn(); + const wrapper = mount(ContactCard, { + propsData: { + editable: false + }, + context: { + on: { + click + } + } + }); - wrapper.setProps({ editable: true }); wrapper.trigger('click'); - expect(wrapper.emitted('click')).toBeTruthy(); + expect(click.mock.calls.length).toEqual(0); }); });