Skip to content

Typescript error on render with a defineComponent (v6.0) #167

Closed
@Benoit-Vasseur

Description

@Benoit-Vasseur

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

Try to call render() on a component define with defineComponent({...}).
This error is reported by typescript :

Argument of type 'DefineComponent<{}, {}, any, Record<string, ComputedGetter<any> | WritableComputedOptions<any>>, MethodOptions, ... 6 more ..., {}>' is not assignable to parameter of type 'VueClass<any>'.
  Type 'ComponentPublicInstanceConstructor<any, any, any, any, Record<string, ComputedGetter<any> | WritableComputedOptions<any>>, MethodOptions> & ComponentOptionsBase<...> & VNodeProps & AllowedComponentProps & ComponentCustomProps' is missing the following properties from type 'VueConstructor<Vue>': extend, nextTick, set, delete, and 9 more.ts(2345)

To Reproduce Steps to reproduce the behavior:

  • Create a project from the vue-cli ( typescript + unit test with jest)
  • convert the generate test to :
const msg = 'new message'
    render(HelloWorld, {
      props: { msg },
    })
    const elt = await screen.findByText(msg)
    expect(elt).toBeDefined()

Expected behavior

No TS error

Screenshots

Related information:

  • @testing-library/vue version: 6.0.0
  • Vue version: 3.0

Relevant code or config (if any)

To throw away the error I did a shim for vue-testing--library in my project. I am not a TS expect so i do not kwnow if it is a correct shim

// src/shims-vue-testing-library.d.ts
import { ConfigurationCallback, RenderOptions } from '@testing-library/vue'
import Vue, { DefineComponent } from 'vue'

declare module '@testing-library/vue' {
  export function render<V extends Vue>(
    TestComponent: DefineComponent<{}, {}, any> | VueClass<V>,
    options?: RenderOptions<V>,
    configure?: ConfigurationCallback<V>,
  ): ComponentHarness
}

Thank you for this great wrapper.

I read some issues that worry me about the routing.
Can I easily use a real router with vue-testing-library ?
Sadly VTU seems to focus on the mock path :/

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions