-
Notifications
You must be signed in to change notification settings - Fork 232
/
Copy pathpure.ts
55 lines (47 loc) · 1.3 KB
/
pure.ts
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
import { ReactHooksRenderer } from './types/react'
const renderers = [
{ required: 'react-test-renderer', renderer: './native/pure' },
{ required: 'react-dom', renderer: './dom/pure' }
]
function hasDependency(name: string) {
try {
require(name)
return true
} catch {
return false
}
}
function getRenderer() {
const validRenderer = renderers.find(({ required }) => hasDependency(required))
if (validRenderer) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
return require(validRenderer.renderer) as ReactHooksRenderer
} else {
const options = renderers
.map(({ required }) => ` - ${required}`)
.sort((a, b) => a.localeCompare(b))
.join('\n')
throw new Error(
`Could not auto-detect a React renderer. Are you sure you've installed one of the following\n${options}\nIf you are using a bundler, please update your imports to use a specific renderer.\nFor instructions see: https://react-hooks-testing-library.com/installation#being-specific`
)
}
}
const {
renderHook,
act,
cleanup,
addCleanup,
removeCleanup,
setDefaultWaitOptions,
suppressErrorOutput
} = getRenderer()
export {
renderHook,
act,
cleanup,
addCleanup,
removeCleanup,
setDefaultWaitOptions,
suppressErrorOutput
}
export * from './types/react'