Skip to content

Commit 3207deb

Browse files
authored
fix: return wrapper error from DOMWrapper ctor if element is nullish (fixes #1984) (#1996)
1 parent eba8d30 commit 3207deb

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

docs/guide/extending-vtu/plugins.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,7 @@ const DataTestIdPlugin = (wrapper) => {
109109
function findByTestId(selector) {
110110
const dataSelector = `[data-testid='${selector}']`
111111
const element = wrapper.element.querySelector(dataSelector)
112-
if (element) {
113-
return new DOMWrapper(element)
114-
}
115-
116-
return createWrapperError('DOMWrapper')
112+
return new DOMWrapper(element)
117113
}
118114

119115
return {

src/domWrapper.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import { isRefSelector } from './utils'
1111
import { createWrapperError } from './errorWrapper'
1212

1313
export class DOMWrapper<NodeType extends Node> extends BaseWrapper<NodeType> {
14-
constructor(element: NodeType) {
14+
constructor(element: NodeType | null | undefined) {
15+
if (!element) {
16+
return createWrapperError('DOMWrapper')
17+
}
1518
super(element)
1619
// plugins hook
1720
config.plugins.DOMWrapper.extend(this)

src/wrapperFactory.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ export enum WrapperType {
77
VueWrapper
88
}
99

10-
type DOMWrapperFactory = <T extends Node>(element: T) => DOMWrapperType<T>
10+
type DOMWrapperFactory = <T extends Node>(
11+
element: T | null | undefined
12+
) => DOMWrapperType<T>
1113
type VueWrapperFactory = <T extends ComponentPublicInstance>(
1214
app: App | null,
1315
vm: T,

tests/exists.spec.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { describe, expect, it } from 'vitest'
22
import { h, defineComponent } from 'vue'
33

4-
import { mount } from '../src'
4+
import { DOMWrapper, mount } from '../src'
55

66
describe('exists', () => {
77
it('returns false when element does not exist', () => {
@@ -50,4 +50,9 @@ describe('exists', () => {
5050
await wrapper.setProps({ hide: true })
5151
expect(child.exists()).toBe(false)
5252
})
53+
54+
it('returns false when wrapper is manually constructed against nullish element', () => {
55+
const wrapper = new DOMWrapper(null)
56+
expect(wrapper.exists()).toBe(false)
57+
})
5358
})

0 commit comments

Comments
 (0)