Skip to content

Commit 9fc1a82

Browse files
committed
update naming, ref contains test
1 parent 63e7260 commit 9fc1a82

File tree

6 files changed

+25
-13
lines changed

6 files changed

+25
-13
lines changed

flow/wrapper.flow.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import type Wrapper from '~src/Wrapper'
44
import type WrapperArray from '~src/WrapperArray'
55

6-
// declare type FindOptions = {
6+
// declare type RefSelector = {
77
// ref: string,
88
// }
99

10-
// declare type Selector = string | Component | FindOptions
10+
// declare type Selector = string | Component | RefSelector
1111
// Component is not getting imported
1212
declare type Selector = any
1313

src/lib/get-selector-type.js

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

3-
import { isDomSelector, isVueComponent, isFindOption } from './validators.js'
3+
import { isDomSelector, isVueComponent, isRefSelector } from './validators.js'
44
import { throwError } from '../lib/util'
55

66
export const selectorTypes = {
@@ -18,7 +18,7 @@ function getSelectorType (selector: Selector): string | void {
1818
return selectorTypes.VUE_COMPONENT
1919
}
2020

21-
if (isFindOption(selector)) {
21+
if (isRefSelector(selector)) {
2222
return selectorTypes.OPTIONS_OBJECT
2323
}
2424
}

src/lib/validators.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,20 @@ export function isValidSelector (selector: any): boolean {
4747
return true
4848
}
4949

50-
return isFindOption(selector)
50+
return isRefSelector(selector)
5151
}
5252

53-
export function isFindOption (findOptions: any) {
54-
if (typeof findOptions !== 'object') {
53+
export function isRefSelector (refOptionsObject: any) {
54+
if (typeof refOptionsObject !== 'object') {
5555
return false
5656
}
5757

58-
if (findOptions === null) {
58+
if (refOptionsObject === null) {
5959
return false
6060
}
6161

6262
const validFindKeys = ['ref']
63-
const entries = Object.entries(findOptions)
63+
const entries = Object.entries(refOptionsObject)
6464

6565
if (!entries.length) {
6666
return false

src/wrappers/wrapper.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ export default class Wrapper implements BaseWrapper {
4545
}
4646

4747
if (selectorType === selectorTypes.OPTIONS_OBJECT) {
48+
if (!this.isVueComponent) {
49+
throwError('$ref selectors can only be used on Vue component wrappers')
50+
}
4851
const nodes = findVNodesByRef(this.vnode, selector.ref)
4952
return nodes.length > 0
5053
}

test/unit/specs/mount/Wrapper/contains.spec.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ describe('contains', () => {
2121
expect(wrapper.contains({ ref: 'foo' })).to.equal(true)
2222
})
2323

24+
it('throws an error when ref selector is called on a wrapper that is not a Vue component', () => {
25+
const compiled = compileToFunctions('<div><a href="/"></a></div>')
26+
const wrapper = mount(compiled)
27+
const a = wrapper.find('a')
28+
const message = '[vue-test-utils]: $ref selectors can only be used on Vue component wrappers'
29+
const fn = () => a.contains({ ref: 'foo' })
30+
expect(fn).to.throw().with.property('message', message)
31+
})
32+
2433
it('returns false if wrapper does not contain element', () => {
2534
const compiled = compileToFunctions('<div><input /></div>')
2635
const wrapper = mount(compiled)

types/index.d.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ type Stubs = {
2626
} | string[]
2727

2828
/**
29-
* Utility type for options object that can be used as a Selector
29+
* Utility type for ref options object that can be used as a Selector
3030
*/
31-
type FindOptions = {
31+
type RefSelector = {
3232
ref: string
3333
}
3434

@@ -67,13 +67,13 @@ interface Wrapper<V extends Vue> extends BaseWrapper {
6767
find<R extends Vue> (selector: ComponentOptions<R>): Wrapper<R>
6868
find (selector: FunctionalComponentOptions): Wrapper<Vue>
6969
find (selector: string): Wrapper<Vue>
70-
find (selector: FindOptions): Wrapper<Vue>
70+
find (selector: RefSelector): Wrapper<Vue>
7171

7272
findAll<R extends Vue, Ctor extends VueClass<R> = VueClass<R>> (selector: Ctor): WrapperArray<R>
7373
findAll<R extends Vue> (selector: ComponentOptions<R>): WrapperArray<R>
7474
findAll (selector: FunctionalComponentOptions): WrapperArray<Vue>
7575
findAll (selector: string): WrapperArray<Vue>
76-
findAll (selector: FindOptions): WrapperArray<Vue>
76+
findAll (selector: RefSelector): WrapperArray<Vue>
7777

7878
html (): string
7979
text (): string

0 commit comments

Comments
 (0)