Skip to content

Commit ccab542

Browse files
lmiller1990afontcu
andauthored
chore: add definitions for findComponent and findAllComponents (#1530)
* chore: add definitions for findComponent and findAllComponents * docs: Update docs/api/wrapper/findAllComponents.md Co-authored-by: Adrià Fontcuberta <[email protected]> Co-authored-by: Adrià Fontcuberta <[email protected]>
1 parent ae73ef4 commit ccab542

File tree

7 files changed

+82
-22
lines changed

7 files changed

+82
-22
lines changed

docs/api/wrapper/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ A `Wrapper` is an object that contains a mounted component or vnode and methods
3737
!!!include(docs/api/wrapper/exists.md)!!!
3838
!!!include(docs/api/wrapper/find.md)!!!
3939
!!!include(docs/api/wrapper/findAll.md)!!!
40+
!!!include(docs/api/wrapper/findComponent.md)!!!
41+
!!!include(docs/api/wrapper/findAllComponents.md)!!!
4042
!!!include(docs/api/wrapper/html.md)!!!
4143
!!!include(docs/api/wrapper/get.md)!!!
4244
!!!include(docs/api/wrapper/is.md)!!!

docs/api/wrapper/find.md

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
Returns `Wrapper` of first DOM node or Vue component matching selector.
44

5-
Use any valid [selector](../selectors.md).
5+
Use any valid DOM selector (uses `querySelector` syntax).
66

77
- **Arguments:**
88

9-
- `{string|Component} selector`
9+
- `{string} selector`
1010

1111
- **Returns:** `{Wrapper}`
1212

@@ -20,34 +20,19 @@ import Bar from './Bar.vue'
2020
const wrapper = mount(Foo)
2121

2222
const div = wrapper.find('div')
23-
expect(div.is('div')).toBe(true)
23+
expect(div.exists()).toBe(true)
2424

25-
const bar = wrapper.find(Bar)
26-
expect(bar.is(Bar)).toBe(true)
27-
28-
const barByName = wrapper.find({ name: 'bar' })
29-
expect(barByName.is(Bar)).toBe(true)
30-
31-
const fooRef = wrapper.find({ ref: 'foo' })
32-
expect(fooRef.is(Foo)).toBe(true)
25+
const byId = wrapper.find('#bar')
26+
expect(byId.element.id).toBe('bar')
3327
```
3428

3529
- **Note:**
3630

37-
- When chaining `find` calls together, only DOM selectors can be used
31+
- You may chain `find` calls together:
3832

3933
```js
4034
let button
4135

42-
// Will throw an error
43-
button = wrapper.find({ ref: 'testButton' })
44-
expect(button.find(Icon).exists()).toBe(true)
45-
46-
// Will throw an error
47-
button = wrapper.find({ ref: 'testButton' })
48-
expect(button.find({ name: 'icon' }).exists()).toBe(true)
49-
50-
// Will work as expected
5136
button = wrapper.find({ ref: 'testButton' })
5237
expect(button.find('.icon').exists()).toBe(true)
5338
```

docs/api/wrapper/findAllComponents.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
## findAllComponents
2+
3+
Returns a [`WrapperArray`](../wrapper-array/) of all matching Vue components.
4+
5+
- **Arguments:**
6+
7+
- `{Component|ref|name} selector`
8+
9+
- **Returns:** `{WrapperArray}`
10+
11+
- **Example:**
12+
13+
```js
14+
import { mount } from '@vue/test-utils'
15+
import Foo from './Foo.vue'
16+
import Bar from './Bar.vue'
17+
18+
const wrapper = mount(Foo)
19+
const bar = wrapper.findAllComponents(Bar).at(0)
20+
expect(bar.exists()).toBeTruthy()
21+
const bars = wrapper.findAllComponents(Bar)
22+
expect(bar).toHaveLength(1)
23+
```

docs/api/wrapper/findComponent.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
## findComponent
2+
3+
Returns `Wrapper` of first matching Vue component.
4+
5+
- **Arguments:**
6+
7+
- `{Component|ref|name} selector`
8+
9+
- **Returns:** `{Wrapper}`
10+
11+
- **Example:**
12+
13+
```js
14+
import { mount } from '@vue/test-utils'
15+
import Foo from './Foo.vue'
16+
import Bar from './Bar.vue'
17+
18+
const wrapper = mount(Foo)
19+
20+
const bar = wrapper.findComponent(Bar) //=> finds Bar by component instance
21+
expect(bar.exists()).toBe(true)
22+
const barByName = wrapper.findComponent({ name: 'bar' }) //=> finds Bar by `name`
23+
expect(barByName.exists()).toBe(true)
24+
const barRef = wrapper.findComponent({ ref: 'bar' }) //=> finds Bar by `ref`
25+
expect(barRef.exists()).toBe(true)
26+
```

packages/test-utils/types/index.d.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ interface BaseWrapper {
5555
classes(className: string): boolean
5656
props(): { [name: string]: any }
5757
props(key: string): any | void
58+
overview(): void
5859

5960
is (selector: Selector): boolean
6061
isEmpty (): boolean
@@ -99,6 +100,18 @@ export interface Wrapper<V extends Vue | null> extends BaseWrapper {
99100
findAll (selector: RefSelector): WrapperArray<Vue>
100101
findAll (selector: NameSelector): WrapperArray<Vue>
101102

103+
findComponent<R extends Vue> (selector: VueClass<R>): Wrapper<R>
104+
findComponent<R extends Vue> (selector: ComponentOptions<R>): Wrapper<R>
105+
findComponent<Props = DefaultProps, PropDefs = PropsDefinition<Props>>(selector: FunctionalComponentOptions<Props, PropDefs>): Wrapper<Vue>
106+
findComponent (selector: RefSelector): Wrapper<Vue>
107+
findComponent (selector: NameSelector): Wrapper<Vue>
108+
109+
findAllComponents<R extends Vue> (selector: VueClass<R>): WrapperArray<R>
110+
findAllComponents<R extends Vue> (selector: ComponentOptions<R>): WrapperArray<R>
111+
findAllComponents<Props = DefaultProps, PropDefs = PropsDefinition<Props>>(selector: FunctionalComponentOptions<Props, PropDefs>): WrapperArray<Vue>
112+
findAllComponents(selector: RefSelector): WrapperArray<Vue>
113+
findAllComponents(selector: NameSelector): WrapperArray<Vue>
114+
102115
html (): string
103116
text (): string
104117
name (): string
@@ -123,6 +136,7 @@ export interface WrapperArray<V extends Vue> extends BaseWrapper {
123136
}
124137

125138
interface WrapperOptions {
139+
attachTo?: Element | string
126140
attachedToDocument?: boolean
127141
}
128142

packages/test-utils/types/test/wrapper.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ wrapper.trigger('mousedown.enter', {
3636
button: 0
3737
})
3838

39+
wrapper.findAllComponents({ name: 'foo' })
40+
wrapper.findComponent({ name: 'foo' })
41+
42+
wrapper.findAllComponents({ ref: 'foo' })
43+
wrapper.findComponent({ ref: 'foo' })
44+
45+
wrapper.findAllComponents(ClassComponent)
46+
wrapper.findComponent(ClassComponent)
47+
3948
/**
4049
* Tests for Wrapper API
4150
*/

packages/test-utils/types/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"compilerOptions": {
33
"lib": ["es2015", "es2017", "dom"],
4-
"module": "es2015",
4+
"module": "esnext",
5+
"target": "ES2017",
56
"moduleResolution": "node",
67
"strict": true,
78
"noEmit": true,

0 commit comments

Comments
 (0)