Skip to content

Commit b87e922

Browse files
committed
feat: Store selector in Wrapper.find() / .findAll()
1 parent fee2e6b commit b87e922

File tree

4 files changed

+78
-3
lines changed

4 files changed

+78
-3
lines changed

Diff for: docs/api/wrapper/README.md

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ A `Wrapper` is an object that contains a mounted component or vnode and methods
2424

2525
`Boolean` (read-only): True if `sync` in mounting options was not `false`
2626

27+
### `selector`
28+
29+
`Selector`: the selector that was used by [`find()`](./find.md) or [`findAll()`](./findAll.md) to create this wrapper
30+
2731
## Methods
2832

2933
!!!include(docs/api/wrapper/attributes.md)!!!

Diff for: packages/test-utils/src/wrapper.js

+10-3
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,9 @@ export default class Wrapper implements BaseWrapper {
197197
return new ErrorWrapper(selector)
198198
}
199199

200-
return createWrapper(node, this.options)
200+
const wrapper = createWrapper(node, this.options)
201+
wrapper.selector = selector
202+
return wrapper
201203
}
202204

203205
/**
@@ -210,9 +212,14 @@ export default class Wrapper implements BaseWrapper {
210212
const wrappers = nodes.map(node => {
211213
// Using CSS Selector, returns a VueWrapper instance if the root element
212214
// binds a Vue instance.
213-
return createWrapper(node, this.options)
215+
const wrapper = createWrapper(node, this.options)
216+
wrapper.selector = selector
217+
return wrapper
214218
})
215-
return new WrapperArray(wrappers)
219+
220+
const wrapperArray = new WrapperArray(wrappers)
221+
wrapperArray.selector = selector
222+
return wrapperArray
216223
}
217224

218225
/**

Diff for: test/specs/wrapper/find.spec.js

+30
Original file line numberDiff line numberDiff line change
@@ -542,4 +542,34 @@ describeWithShallowAndMount('find', mountingMethod => {
542542
expect(wrapper.find('p').vm.$options.name).to.equal('bar')
543543
}
544544
)
545+
546+
it('stores CSS selector', () => {
547+
const compiled = compileToFunctions('<div><p></p><p></p></div>')
548+
const wrapper = mountingMethod(compiled)
549+
const selector = 'p'
550+
const result = wrapper.find(selector)
551+
expect(result.selector.value).to.equal(selector)
552+
})
553+
554+
it('stores ref selector', () => {
555+
const compiled = compileToFunctions('<div><p ref="foo"></p></div>')
556+
const wrapper = mountingMethod(compiled)
557+
const selector = { ref: 'foo' }
558+
const result = wrapper.find(selector)
559+
expect(result.selector.value).to.equal(selector)
560+
})
561+
562+
it('stores component selector', () => {
563+
const wrapper = mountingMethod(ComponentWithChild)
564+
const selector = Component
565+
const result = wrapper.find(selector)
566+
expect(result.selector.value).to.equal(selector)
567+
})
568+
569+
it('stores name selector', () => {
570+
const wrapper = mountingMethod(ComponentWithChild)
571+
const selector = { name: 'test-component' }
572+
const result = wrapper.find(selector)
573+
expect(result.selector.value).to.equal(selector)
574+
})
545575
})

Diff for: test/specs/wrapper/findAll.spec.js

+34
Original file line numberDiff line numberDiff line change
@@ -343,4 +343,38 @@ describeWithShallowAndMount('findAll', mountingMethod => {
343343
expect(wrappers.at(2).vm.$options.name).to.equal('bar')
344344
}
345345
)
346+
347+
it('stores CSS selector', () => {
348+
const compiled = compileToFunctions('<div><p></p><p></p></div>')
349+
const wrapper = mountingMethod(compiled)
350+
const selector = 'p'
351+
const result = wrapper.findAll('p')
352+
expect(result.selector.value).to.equal(selector)
353+
expect(result.at(0).selector.value).to.equal(selector)
354+
})
355+
356+
it('stores ref selector', () => {
357+
const compiled = compileToFunctions('<div><div ref="foo" /></div>')
358+
const wrapper = mountingMethod(compiled)
359+
const selector = { ref: 'foo' }
360+
const result = wrapper.findAll(selector)
361+
expect(result.selector.value).to.equal(selector)
362+
expect(result.at(0).selector.value).to.equal(selector)
363+
})
364+
365+
it('stores component selector', () => {
366+
const wrapper = mountingMethod(ComponentWithChild)
367+
const selector = Component
368+
const result = wrapper.findAll(selector)
369+
expect(result.selector.value).to.equal(selector)
370+
expect(result.at(0).selector.value).to.equal(selector)
371+
})
372+
373+
it('stores name selector', () => {
374+
const wrapper = mountingMethod(ComponentWithChild)
375+
const selector = { name: 'test-component' }
376+
const result = wrapper.findAll(selector)
377+
expect(result.selector.value).to.equal(selector)
378+
expect(result.at(0).selector.value).to.equal(selector)
379+
})
346380
})

0 commit comments

Comments
 (0)