未知的自定义元素: - 您是不是正确注册了组件? default.vue Jest 中的 <nuxt /> 组件出错

Posted

技术标签:

【中文标题】未知的自定义元素: - 您是不是正确注册了组件? default.vue Jest 中的 <nuxt /> 组件出错【英文标题】:Unknown custom element: - did you register the component correctly? error on with <nuxt /> component in default.vue Jest未知的自定义元素: - 您是否正确注册了组件? default.vue Jest 中的 <nuxt /> 组件出错 【发布时间】:2020-02-02 02:34:58 【问题描述】:

我正在尝试为具有以下代码的 default.vue 文件编写测试:

default.vue

<template>
 <div>
   <top-nav :class="isSticky ? 'fixed-top stickyAnimate' : ''" />
   <main>
     <nuxt />
   </main>
   <footer />
 </div>
</template>

<script>
import TopNav from '../components/TopNav.vue';
import Footer from '../components/Footer.vue';
import StickyNavMixin from '../mixins/stickyNavMixin';

export default 
  components: 
    TopNav,
    Footer,
  ,
  mixins: [StickyNavMixin],
  data() 
    return 
      loading: true,
    ;
  ,
  mounted() 
    if (!window.location.hash) 
      this.loading = false;
    
  ,
;
</script>

然后我的测试看起来像这样 default.spec.js

import  createLocalVue, shallowMount  from '@vue/test-utils';
import BootstrapVue from 'bootstrap-vue';
import StickyNavMixin from '../mixins/stickyNavMixin';
import Default from '../layouts/default.vue';
import TopNav from '../components/TopNav.vue';
import Footer from '../components/Footer.vue';

const localVue = createLocalVue();
localVue.use(BootstrapVue);
localVue.mixin(StickyNavMixin);

describe('Default', () => 
  let wrapper;
  beforeEach(() => 
    wrapper = shallowMount(Default, 
      localVue,
    );
  );

  test('is a Vue instance', () => 
    expect(wrapper.isVueInstance()).toBeTruthy();
  );

  test('has navbar component', () => 
    expect(wrapper.find(TopNav).exists()).toBe(true);
  );
);

当我运行这个测试时,我得到错误说: [Vue 警告]:未知的自定义元素:- 您是否正确注册了组件?为了 递归组件,请确保提供“名称”选项。在 --->

中找到

请引导我走向正确的方向。提前谢谢!

【问题讨论】:

【参考方案1】:

我想出了如何克服这个错误。我不得不把它从包装纸中取出。您不必导入 Nuxt,只需字符串 'nuxt' 将其替换为包装器中的存根元素:

describe('DefaultLayout', () => 
  let wrapper;

  afterEach(() => 
    wrapper.destroy();
  );

  /** mount **/
  test('is a Vue instance', () => 
    wrapper = mount(DefaultLayout, 
      localVue,
      stubs: ['nuxt'],
    );
    expect(wrapper.isVueInstance()).toBeTruthy();
  );

 /** shallowMount **/
 test('is a Vue instance', () => 
    wrapper = shallowMount(DefaultLayout, 
       localVue,
       stubs: ['nuxt', 'top-nav', 'footer'],
    );
    expect(wrapper.isVueInstance()).toBeTruthy();
    // expect(wrapper.html()).toBe('<div>'); => this is to debug see below for output
  );
);

//DEBUG
"<div><top-nav-stub class=\"\"></top-nav-stub> <main><nuxt-stub></nuxt-stub> . 
</main> <footer-stub></footer-stub></div>"

【讨论】:

以上是关于未知的自定义元素: - 您是不是正确注册了组件? default.vue Jest 中的 <nuxt /> 组件出错的主要内容,如果未能解决你的问题,请参考以下文章

未知的自定义元素: - 您是不是正确注册了组件? default.vue Jest 中的 <nuxt /> 组件出错

未知的自定义元素:<v-app> - 您是不是正确注册了组件?对于递归组件

Vue/Vuetify - 未知的自定义元素:<v-app> - 您是不是正确注册了组件?

Vuetify 错误:未知的自定义元素:<v-app-bar> - 您是不是正确注册了组件?

[Vue 警告]:未知的自定义元素:<app> - 您是不是正确注册了组件? (在 <Root> 中找到)

Vue.js Vuetify.js - 未知的自定义元素:<v-list-item>, <v-list-item-title> 您是不是正确注册了组件?