-
Notifications
You must be signed in to change notification settings - Fork 231
/
pure.ts
30 lines (24 loc) 路 900 Bytes
/
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
import { RenderingEngineArray, ReactHooksRenderer } from 'types'
const RENDERERS: RenderingEngineArray = [
{ required: 'react-test-renderer', renderer: './native/pure' }
]
function getRenderer(renderers: RenderingEngineArray): string {
const hasDependency = (name: string) => {
try {
require(name)
return true
} catch {
return false
}
}
const [validRenderer] = renderers.filter(({ required }) => hasDependency(required))
if (validRenderer) {
return validRenderer.renderer
} else {
const options = renderers.map(({ renderer }) => ` - ${renderer}`).join('\n')
throw new Error(`Could not auto-detect a React renderer. Options are:\n${options}`)
}
}
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { renderHook, act, cleanup } = require(getRenderer(RENDERERS)) as ReactHooksRenderer
export { renderHook, act, cleanup }