1
1
import * as enzyme from 'enzyme' ;
2
2
import type { ReactWrapper } from 'enzyme' ;
3
- import type { VNode } from 'preact' ;
3
+ import { FunctionComponent , JSX , VNode } from 'preact' ;
4
4
5
5
let containers : HTMLElement [ ] = [ ] ;
6
6
let wrappers : ReactWrapper [ ] = [ ] ;
@@ -20,16 +20,52 @@ export type MountOptions = {
20
20
prepareContainer ?: ( container : HTMLElement ) => void ;
21
21
} ;
22
22
23
+ export type EnzymeSelector = string | FunctionComponent < any > ;
24
+
25
+ /**
26
+ * Inspired by DefinitelyTyped's ReactWrapper.
27
+ * @see https://github.com/DefinitelyTyped/DefinitelyTyped/blob/cebb88fecfa52f854826e216a537867c11b0150e/types/enzyme/index.d.ts
28
+ */
29
+ export type ComponentWrapper < P = { } , S = { } > = {
30
+ at ( index : number ) : ComponentWrapper ;
31
+ childAt ( index : number ) : ComponentWrapper < any , any > ;
32
+
33
+ closest < P2 > ( component : FunctionComponent < P2 > ) : ComponentWrapper < P2 , any > ;
34
+ closest ( selector : string ) : ComponentWrapper < JSX . HTMLAttributes , any > ;
35
+
36
+ exists ( selector ?: EnzymeSelector ) : boolean ;
37
+
38
+ find < P2 > ( component : FunctionComponent < P2 > ) : ComponentWrapper < P2 , any > ;
39
+ find ( selector : string ) : ComponentWrapper < JSX . HTMLAttributes , any > ;
40
+
41
+ first ( ) : ComponentWrapper < P , S > ;
42
+ forEach (
43
+ fn : ( wrapper : ComponentWrapper < P , S > , index : number ) => any ,
44
+ ) : ComponentWrapper < P , S > ;
45
+ getDOMNode ( ) : HTMLElement ;
46
+ hasClass ( className : string | RegExp ) : boolean ;
47
+ last ( ) : ComponentWrapper < P , S > ;
48
+ length : number ;
49
+ map < V > ( fn : ( wrapper : ComponentWrapper < P , S > , index : number ) => V ) : V [ ] ;
50
+ prop < K extends keyof P > ( key : K ) : P [ K ] ;
51
+ props ( ) : P ;
52
+ setProps < K extends keyof P > ( props : Pick < P , K > ) : ComponentWrapper < P , S > ;
53
+ simulate ( event : string , ...args : any [ ] ) : ComponentWrapper < P , S > ;
54
+ text ( ) : string ;
55
+ unmount ( ) : void ;
56
+ update ( ) : ComponentWrapper < P , S > ;
57
+ } ;
58
+
23
59
/**
24
60
* Render a Preact component using Enzyme and return a wrapper.
25
61
*
26
62
* The component can be unmounted by calling `wrapper.unmount()` or by calling
27
63
* {@link unmountAll} at the end of the test.
28
64
*/
29
- export function mount (
65
+ export function mount < P = { } , S = { } > (
30
66
jsx : VNode ,
31
67
{ connected = false , prepareContainer } : MountOptions = { } ,
32
- ) {
68
+ ) : ComponentWrapper < P , S > {
33
69
let wrapper ;
34
70
if ( connected ) {
35
71
const container = document . createElement ( 'div' ) ;
@@ -46,7 +82,7 @@ export function mount(
46
82
47
83
wrappers . push ( wrapper ) ;
48
84
49
- return wrapper ;
85
+ return wrapper as ComponentWrapper < P , S > ;
50
86
}
51
87
52
88
/**
0 commit comments