1
- import { ComponentPublicInstance , nextTick , App } from 'vue'
1
+ import { ComponentPublicInstance , nextTick , App , render } from 'vue'
2
2
import { ShapeFlags } from '@vue/shared'
3
3
4
4
import { DOMWrapper } from './dom-wrapper'
@@ -14,11 +14,11 @@ export class VueWrapper<T extends ComponentPublicInstance>
14
14
implements WrapperAPI {
15
15
private componentVM : T
16
16
private rootVM : ComponentPublicInstance
17
- private __app : App
17
+ private __app : App | null
18
18
private __setProps : ( props : Record < string , any > ) => void
19
19
20
20
constructor (
21
- app : App ,
21
+ app : App | null ,
22
22
vm : ComponentPublicInstance ,
23
23
setProps ?: ( props : Record < string , any > ) => void
24
24
) {
@@ -99,15 +99,15 @@ export class VueWrapper<T extends ComponentPublicInstance>
99
99
100
100
findComponent ( selector : FindComponentSelector ) : VueWrapper < T > | ErrorWrapper {
101
101
if ( typeof selector === 'object' && 'ref' in selector ) {
102
- return createWrapper ( this . vm . $refs [ selector . ref ] as T )
102
+ return createWrapper ( null , this . vm . $refs [ selector . ref ] as T )
103
103
}
104
104
const result = find ( this . vm . $ . subTree , selector )
105
105
if ( ! result . length ) return new ErrorWrapper ( { selector } )
106
- return createWrapper ( result [ 0 ] )
106
+ return createWrapper ( null , result [ 0 ] )
107
107
}
108
108
109
109
findAllComponents ( selector : FindAllComponentsSelector ) : VueWrapper < T > [ ] {
110
- return find ( this . vm . $ . subTree , selector ) . map ( ( c ) => createWrapper ( c ) )
110
+ return find ( this . vm . $ . subTree , selector ) . map ( ( c ) => createWrapper ( null , c ) )
111
111
}
112
112
113
113
findAll < T extends Element > ( selector : string ) : DOMWrapper < T > [ ] {
@@ -130,6 +130,13 @@ export class VueWrapper<T extends ComponentPublicInstance>
130
130
}
131
131
132
132
unmount ( ) {
133
+ // preventing dispose of child component
134
+ if ( ! this . __app ) {
135
+ throw new Error (
136
+ `wrapper.unmount() can only be called by the root wrapper`
137
+ )
138
+ }
139
+
133
140
if ( this . parentElement ) {
134
141
this . parentElement . removeChild ( this . element )
135
142
}
0 commit comments