Skip to content

Commit ca83470

Browse files
committed
chore: refactor tests for classnames to use mount() (#4341)
1 parent fb8c9e5 commit ca83470

File tree

4 files changed

+26
-22
lines changed

4 files changed

+26
-22
lines changed

test/specs/addons/Confirm/Confirm-test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@ describe('Confirm', () => {
3232
autoGenerateKey: false,
3333
propKey: 'header',
3434
ShorthandComponent: Modal.Header,
35+
rendersPortal: true,
3536
mapValueToProps: (content) => ({ content }),
3637
})
3738
common.implementsShorthandProp(Confirm, {
3839
autoGenerateKey: false,
3940
propKey: 'content',
4041
ShorthandComponent: Modal.Content,
42+
rendersPortal: true,
4143
mapValueToProps: (content) => ({ content }),
4244
})
4345

test/specs/commonTests/classNameHelpers.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import _ from 'lodash'
2-
import React, { createElement } from 'react'
2+
import React from 'react'
33

44
import { consoleUtil } from 'test/utils'
55

@@ -8,24 +8,24 @@ export const classNamePropValueBeforePropName = (Component, propKey, propValues,
88

99
propValues.forEach((propVal) => {
1010
it(`adds "${propVal} ${className}" to className`, () => {
11-
shallow(createElement(Component, { ...requiredProps, [propKey]: propVal }), {
12-
autoNesting: true,
13-
}).should.have.className(`${propVal} ${className}`)
11+
const wrapper = mount(
12+
React.createElement(Component, { ...requiredProps, [propKey]: propVal }),
13+
)
14+
const elementClassName = wrapper.childAt(0).getDOMNode().className
15+
16+
expect(elementClassName).include(`${propVal} ${className}`)
1417
})
1518
})
1619
}
1720

1821
export const noClassNameFromBoolProps = (Component, propKey, propValues, options = {}) => {
19-
const { className = propKey, nestingLevel = 0, requiredProps = {} } = options
22+
const { className = propKey, requiredProps = {} } = options
2023

2124
_.each([true, false], (bool) =>
2225
it(`does not add any className when ${bool}`, () => {
2326
consoleUtil.disableOnce()
2427

25-
const wrapper = shallow(createElement(Component, { ...requiredProps, [propKey]: bool }), {
26-
autoNesting: true,
27-
nestingLevel,
28-
})
28+
const wrapper = mount(React.createElement(Component, { ...requiredProps, [propKey]: bool }))
2929

3030
wrapper.should.not.have.className(className)
3131
wrapper.should.not.have.className('true')
@@ -38,15 +38,18 @@ export const noClassNameFromBoolProps = (Component, propKey, propValues, options
3838

3939
export const noDefaultClassNameFromProp = (Component, propKey, propValues, options = {}) => {
4040
const { defaultProps = {} } = Component
41-
const { className = propKey, nestingLevel = 0, requiredProps = {} } = options
41+
const { className = propKey, requiredProps = {} } = options
42+
4243
// required props may include a prop that creates a className
4344
// if so, we cannot assert that it doesn't exist by default because it is required to exist
4445
// skip assertions for required props
4546
if (propKey in defaultProps) return
4647
if (propKey in requiredProps) return
4748

4849
it('is not included in className when not defined', () => {
49-
const wrapper = shallow(<Component {...requiredProps} />, { autoNesting: true, nestingLevel })
50+
consoleUtil.disableOnce()
51+
const wrapper = mount(<Component {...requiredProps} />)
52+
5053
wrapper.should.not.have.className(className)
5154

5255
// ensure that none of the prop option values are in className

test/specs/commonTests/implementsClassNameProps.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,11 @@ export const propKeyOnlyToClassName = (Component, propKey, options = {}) => {
5555

5656
const element = React.createElement(Component, { ...requiredProps, [propKey]: true })
5757
const wrapper = mount(element)
58+
const elementClassName = wrapper.childAt(0).getDOMNode().className
5859

5960
// ".should.have.className" with "mount" renderer does not handle properly cases when "className" contains
60-
// multiple classes. That's why ".split()" is required.
61-
className.split(' ').forEach((classNamePart) => {
62-
wrapper.childAt(0).should.have.className(classNamePart)
63-
})
61+
// multiple classes.
62+
expect(elementClassName).include(className)
6463
})
6564

6665
it('does not add prop value to className', () => {
@@ -100,15 +99,13 @@ export const propKeyOrValueAndKeyToClassName = (Component, propKey, propValues,
10099
})
101100

102101
it('adds only the name to className when true', () => {
103-
shallow(React.createElement(Component, { ...requiredProps, [propKey]: true }), {
104-
autoNesting: true,
105-
}).should.have.className(className)
102+
const wrapper = mount(React.createElement(Component, { ...requiredProps, [propKey]: true }))
103+
104+
wrapper.should.have.className(className)
106105
})
107106

108107
it('adds no className when false', () => {
109-
const wrapper = shallow(
110-
React.createElement(Component, { ...requiredProps, [propKey]: false }),
111-
)
108+
const wrapper = mount(React.createElement(Component, { ...requiredProps, [propKey]: false }))
112109

113110
wrapper.should.not.have.className(className)
114111
wrapper.should.not.have.className('true')

test/specs/commonTests/implementsShorthandProp.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const shorthandComponentName = (ShorthandComponent) => {
2828
* @param {function} options.mapValueToProps A function that maps a primitive value to the Component props.
2929
* @param {Boolean} [options.parentIsFragment=false] A flag that shows the type of the Component to test.
3030
* @param {Object} [options.requiredProps={}] Props required to render the component.
31+
* @param {boolean} [options.rendersPortal=false] Does this component render a Portal powered component?
3132
* @param {Object} [options.shorthandDefaultProps] Default props for the shorthand component.
3233
* @param {Object} [options.shorthandOverrideProps] Override props for the shorthand component.
3334
*/
@@ -38,6 +39,7 @@ export default (Component, options = {}) => {
3839
autoGenerateKey = true,
3940
mapValueToProps,
4041
parentIsFragment = false,
42+
rendersPortal = false,
4143
propKey,
4244
ShorthandComponent,
4345
shorthandDefaultProps = {},
@@ -79,7 +81,7 @@ export default (Component, options = {}) => {
7981
shallow(<Component {...requiredProps} />).should.have.descendants(ShorthandComponent)
8082
})
8183
} else {
82-
if (!parentIsFragment) {
84+
if (!parentIsFragment && !rendersPortal) {
8385
noDefaultClassNameFromProp(Component, propKey, [], options)
8486
}
8587

0 commit comments

Comments
 (0)