forked from epicweb-dev/advanced-react-patterns
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.js
57 lines (51 loc) · 1.66 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import {alfredTip} from '@kentcdodds/react-workshop-app/test-utils'
import {render} from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import * as React from 'react'
import {
findAllInRenderedTree,
isCompositeComponentWithType,
} from 'react-dom/test-utils'
import {Switch} from '../src/switch'
const findSwitchInstances = rootInstance =>
findAllInRenderedTree(rootInstance, c =>
isCompositeComponentWithType(c, Switch),
)
function validateSwitchInstance(switchInstance) {
alfredTip(
() => expect(switchInstance).toBeDefined(),
`Unable to find the Switch component. Make sure you're rendering that!`,
)
alfredTip(
() =>
expect(switchInstance.props).toMatchObject({
on: expect.any(Boolean),
onClick: expect.any(Function),
// it can also have aria-pressed...
}),
'The Switch component is not being passed the right props.',
)
}
// this only exists so we can search for an instance of the Switch
// and make some assertions to give more helpful error messages.
class Root extends React.Component {
render() {
return this.props.children
}
}
function renderToggle(ui) {
let rootInstance
let rootRef = instance => (rootInstance = instance)
const utils = render(<Root ref={rootRef}>{ui}</Root>)
const switchInstance = findSwitchInstances(rootInstance)[0]
validateSwitchInstance(switchInstance)
const toggleButton = utils.getAllByTestId('toggle-input')[0]
return {
toggle: () => userEvent.click(utils.getAllByTestId('toggle-input')[0]),
toggleButton,
rootInstance,
...utils,
}
}
export * from '@testing-library/react'
export {render, renderToggle, userEvent}