Skip to content

after manually calling the umount method, cleanupAtWrapper will report an error #311

Closed
@hcg1023

Description

@hcg1023

Describe the bug A clear and concise description of what the bug is.

After manually calling the umount method, cleanupAtWrapper will report an error TypeError: Cannot read properties of null (reading 'parentNode')

To Reproduce Steps to reproduce the behavior:

cleanup should not report an error

Expected behavior

Screenshots

image

Related information:

  • @testing-library/vue version: 8.0.2
  • Vue version: 3.2.33
  • node version: 16
  • npm (or yarn) version: pnpm v8

Relevant code or config (if any)

import { createDragDropManager, DragDropManager } from 'dnd-core'
import { render, cleanup } from '@testing-library/vue'
import { useDndContextInjector } from '../DndContext'
import DndProvider from '../DndProvider'
import { TestBackend } from 'react-dnd-test-backend'
import { defineComponent, h } from 'vue-demi'
import { describe, afterEach, it, expect } from 'vitest'

describe('DndProvider', () => {
  afterEach(cleanup)

  it('stores DragDropManager in global context and cleans up on unmount', () => {
    let capturedManager

    const ChildComponent = defineComponent(() => {
      capturedManager = useDndContextInjector()
      return () => null
    })
    const TestProvider = defineComponent(() => {
      return () =>
        h(
          DndProvider,
          { backend: TestBackend },
          { default: () => h(ChildComponent) }
        )
    })

    const mountProvider = () => render(TestProvider)

    const globalInstance = (): DragDropManager =>
      (global as any)[Symbol.for('__VUE_DND_CONTEXT_INSTANCE__')] as any

    // Single mount & unmount works
    const root = mountProvider()
    expect(globalInstance()).toEqual(capturedManager)
    root.unmount()
    expect(globalInstance()).toEqual(null)

    // Two mounted components do a refcount
    const rootA = mountProvider()
    const rootB = mountProvider()
    expect(globalInstance()).toEqual(capturedManager)
    rootA.unmount()
    expect(globalInstance()).toEqual(capturedManager)
    rootB.unmount()
    expect(globalInstance()).toEqual(null)
  })
})

Additional context

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingreleased

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions