Skip to content

Commit 3d90c86

Browse files
refactor: cleanup find methods
1 parent aa7b76d commit 3d90c86

File tree

1 file changed

+36
-35
lines changed

1 file changed

+36
-35
lines changed

packages/test-utils/src/wrapper.js

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -225,41 +225,8 @@ export default class Wrapper implements BaseWrapper {
225225
'Use `findComponent` instead'
226226
)
227227
}
228-
const node = find(this.rootNode, this.vm, selector)[0]
229-
230-
if (!node) {
231-
return new ErrorWrapper(rawSelector)
232-
}
233228

234-
const wrapper = createWrapper(node, this.options)
235-
wrapper.selector = rawSelector
236-
return wrapper
237-
}
238-
239-
/**
240-
* Finds DOM elements in tree of the current wrapper that matches
241-
* the provided selector.
242-
*/
243-
findAll(rawSelector: Selector): WrapperArray {
244-
const selector = getSelector(rawSelector, 'findAll')
245-
if (selector.type !== DOM_SELECTOR) {
246-
warnDeprecated(
247-
'finding components with `findAll`',
248-
'Use `findAllComponents` instead'
249-
)
250-
}
251-
const nodes = find(this.rootNode, this.vm, selector)
252-
const wrappers = nodes.map(node => {
253-
// Using CSS Selector, returns a VueWrapper instance if the root element
254-
// binds a Vue instance.
255-
const wrapper = createWrapper(node, this.options)
256-
wrapper.selector = rawSelector
257-
return wrapper
258-
})
259-
260-
const wrapperArray = new WrapperArray(wrappers)
261-
wrapperArray.selector = rawSelector
262-
return wrapperArray
229+
return this.__find(rawSelector, selector)
263230
}
264231

265232
/**
@@ -273,6 +240,16 @@ export default class Wrapper implements BaseWrapper {
273240
'findComponent requires a Vue constructor or valid find object. If you are searching for DOM nodes, use `find` instead'
274241
)
275242
}
243+
if (!this.vm) {
244+
throwError(
245+
'You cannot chain findComponent off a DOM element. It can only be used on Vue Components.'
246+
)
247+
}
248+
249+
return this.__find(rawSelector, selector)
250+
}
251+
252+
__find(rawSelector: Selector, selector: Object): Wrapper | ErrorWrapper {
276253
const node = find(this.rootNode, this.vm, selector)[0]
277254

278255
if (!node) {
@@ -284,17 +261,41 @@ export default class Wrapper implements BaseWrapper {
284261
return wrapper
285262
}
286263

264+
/**
265+
* Finds DOM elements in tree of the current wrapper that matches
266+
* the provided selector.
267+
*/
268+
findAll(rawSelector: Selector): WrapperArray {
269+
const selector = getSelector(rawSelector, 'findAll')
270+
if (selector.type !== DOM_SELECTOR) {
271+
warnDeprecated(
272+
'finding components with `findAll`',
273+
'Use `findAllComponents` instead'
274+
)
275+
}
276+
return this.__findAll(rawSelector, selector)
277+
}
278+
287279
/**
288280
* Finds components in tree of the current wrapper that matches
289281
* the provided selector.
290282
*/
291283
findAllComponents(rawSelector: Selector): WrapperArray {
292284
const selector = getSelector(rawSelector, 'findAll')
285+
if (!this.vm) {
286+
throwError(
287+
'You cannot chain findAllComponents off a DOM element. It can only be used on Vue Components.'
288+
)
289+
}
293290
if (selector.type === DOM_SELECTOR) {
294291
throwError(
295-
'findAllComponent requires a Vue constructor or valid find object. If you are searching for DOM nodes, use `find` instead'
292+
'findAllComponents requires a Vue constructor or valid find object. If you are searching for DOM nodes, use `find` instead'
296293
)
297294
}
295+
return this.__findAll(rawSelector, selector)
296+
}
297+
298+
__findAll(rawSelector: Selector, selector: Object): WrapperArray {
298299
const nodes = find(this.rootNode, this.vm, selector)
299300
const wrappers = nodes.map(node => {
300301
// Using CSS Selector, returns a VueWrapper instance if the root element

0 commit comments

Comments
 (0)