Skip to content

Commit

Permalink
fix: return wrapper error from DOMWrapper ctor if element is nullish (f…
Browse files Browse the repository at this point in the history
…ixes #1984) (#1996)
  • Loading branch information
ascott18 committed Mar 9, 2023
1 parent eba8d30 commit 3207deb
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 8 deletions.
6 changes: 1 addition & 5 deletions docs/guide/extending-vtu/plugins.md
Expand Up @@ -109,11 +109,7 @@ const DataTestIdPlugin = (wrapper) => {
function findByTestId(selector) {
const dataSelector = `[data-testid='${selector}']`
const element = wrapper.element.querySelector(dataSelector)
if (element) {
return new DOMWrapper(element)
}

return createWrapperError('DOMWrapper')
return new DOMWrapper(element)
}

return {
Expand Down
5 changes: 4 additions & 1 deletion src/domWrapper.ts
Expand Up @@ -11,7 +11,10 @@ import { isRefSelector } from './utils'
import { createWrapperError } from './errorWrapper'

export class DOMWrapper<NodeType extends Node> extends BaseWrapper<NodeType> {
constructor(element: NodeType) {
constructor(element: NodeType | null | undefined) {
if (!element) {
return createWrapperError('DOMWrapper')
}
super(element)
// plugins hook
config.plugins.DOMWrapper.extend(this)
Expand Down
4 changes: 3 additions & 1 deletion src/wrapperFactory.ts
Expand Up @@ -7,7 +7,9 @@ export enum WrapperType {
VueWrapper
}

type DOMWrapperFactory = <T extends Node>(element: T) => DOMWrapperType<T>
type DOMWrapperFactory = <T extends Node>(
element: T | null | undefined
) => DOMWrapperType<T>
type VueWrapperFactory = <T extends ComponentPublicInstance>(
app: App | null,
vm: T,
Expand Down
7 changes: 6 additions & 1 deletion tests/exists.spec.ts
@@ -1,7 +1,7 @@
import { describe, expect, it } from 'vitest'
import { h, defineComponent } from 'vue'

import { mount } from '../src'
import { DOMWrapper, mount } from '../src'

describe('exists', () => {
it('returns false when element does not exist', () => {
Expand Down Expand Up @@ -50,4 +50,9 @@ describe('exists', () => {
await wrapper.setProps({ hide: true })
expect(child.exists()).toBe(false)
})

it('returns false when wrapper is manually constructed against nullish element', () => {
const wrapper = new DOMWrapper(null)
expect(wrapper.exists()).toBe(false)
})
})

0 comments on commit 3207deb

Please sign in to comment.