highlightjs / vue-plugin

Highlight.js Vue Plugin
BSD 3-Clause "New" or "Revised" License
201 stars 27 forks source link

How to use hljsVuePlugin in unit test w/ jest + @testing-library/vue ? #34

Open Scipionh opened 2 years ago

Scipionh commented 2 years ago

I am currently experienced the following error when running my unit tests:

ReferenceError: Vue is not defined

    > 10 | import hljsVuePlugin from '@highlightjs/vue-plugin';
         | ^

Here is my component code:

    <template>
      <div>
        <highlightjs autodetect :code="'hello world'" />
      </div>
    </template>

    <script lang="ts">
    import { defineComponent } from 'vue';
    import hljsVuePlugin from '@highlightjs/vue-plugin';

    export default defineComponent({
      components: {
        highlightjs: hljsVuePlugin.component,
      },
    });
    </script>

in my test file, I'm simply trying to mount this component:

    const wrapper = mount(FooBlah, {
      global: {
        stubs: {
          highlightjs: {
            template: '<div />',
          },
        },
      },
    });

Here are my libraries versions:

    "vue": "^3.2.33",
    "@highlightjs/vue-plugin": "^2.1.2",
    "highlight.js": "^11.6.0",
    "@vue/cli-plugin-unit-jest": "~5.0.4",
    "@vue/test-utils": "^2.0.2",
    "@vue/vue3-jest": "^27.0.0",

Is there any way I could tell him to simply ignore the highlightjs the component in the jest.config ?

joshgoebel commented 2 years ago

Perhaps you need to be loading the ESM module rather than the CJS which is going to expect Vue to be declared globally?

Scipionh commented 2 years ago

I'm not sure what you are suggesting here. I'm using import and in the vue-plugin/package.json I can see:

"exports": {
    ".": {
      "require": "./dist/highlightjs-vue.min.js",
      "import": "./dist/highlightjs-vue.esm.min.js",
      "types": "./dist/vue.d.ts"
    }
  },

So it should use the esm module.

joshgoebel commented 2 years ago

Yet, the esm source never once references Vue, so your error makes no sense?...