From 4d8e9cacdd5b3833ae4a52bfe1ae9ad0a6a3104d Mon Sep 17 00:00:00 2001 From: HaNdTriX Date: Mon, 13 Aug 2018 20:03:59 +0200 Subject: [PATCH] Improve getDisplayName util (#4944) - [x] Add unit test - [x] Allow to get the display name of a native component (e.g.: `div`) without throwing - [ ] Remove displayName in production mode --- lib/utils.js | 4 ++++ test/unit/getDisplayName.test.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 test/unit/getDisplayName.test.js diff --git a/lib/utils.js b/lib/utils.js index c1daa56f..a36d3e41 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -46,6 +46,10 @@ export function printAndExit (message, code = 1) { } export function getDisplayName (Component) { + if (typeof Component === 'string') { + return Component + } + return Component.displayName || Component.name || 'Unknown' } diff --git a/test/unit/getDisplayName.test.js b/test/unit/getDisplayName.test.js new file mode 100644 index 00000000..8181de67 --- /dev/null +++ b/test/unit/getDisplayName.test.js @@ -0,0 +1,30 @@ +/* global describe, it, expect */ +import { Component } from 'react' +import { getDisplayName } from '../../dist/lib/utils' + +describe('getDisplayName', () => { + it('gets the proper display name of a component', () => { + class ComponentOne extends Component { + render () { + return null + } + } + + class ComponentTwo extends Component { + static displayName = 'CustomDisplayName' + render () { + return null + } + } + + function FunctionalComponent () { + return null + } + + expect(getDisplayName(ComponentOne)).toBe('ComponentOne') + expect(getDisplayName(ComponentTwo)).toBe('CustomDisplayName') + expect(getDisplayName(FunctionalComponent)).toBe('FunctionalComponent') + expect(getDisplayName(() => null)).toBe('Unknown') + expect(getDisplayName('div')).toBe('div') + }) +})