如何测试vue Js metaInfo

Posted

技术标签:

【中文标题】如何测试vue Js metaInfo【英文标题】:How to test vue Js metaInfo 【发布时间】:2020-01-14 01:16:17 【问题描述】:

正在编写一些单元测试,我有一个使用 Vue-meta 设置元信息的组件

我的组件看起来像这样。

export default 
...
  metaInfo () 
    const expertName = this.getBlogInfo.blog.author.trim()
    const fullName = expertName ? `$expertName.first_name $expertName.last_name` : 'Cowsoko'
    return 
      title: `Dairynomics - Blog post from $fullName`,
      meta: [
        
          vmid: 'og:description',
          name: 'og:description',
          content: this.description
        ,
        
          vmid: 'og:image',
          name: 'og:image',
          content: this.getBlogInfo.blog.photo
        
      ]
    
  

...

【问题讨论】:

【参考方案1】:

您可以在每个组件中正常插入元数据。 如果您的页面是动态的,并且如果您想要任何动态 SEO 或元标记,您可以使用 vue-headful。 像这样

<vue-headful
        title="Title from vue-headful"
        description="Description from vue-headful"
    />

在 vue-headful 中你可以编写所有的元标记。

【讨论】:

OP 询问如何测试 vue-meta,而不是vue-headful【参考方案2】:

有一个问题on their github repo 说您需要创建一个本地 Vue 实例。

您可以阅读有关本地 Vue 实例 in the vue-test-utils docs 的信息。它允许您在不污染全局 Vue 类的情况下添加组件、mixins 和安装插件,即仅在此测试中添加 vue-meta 属性。

import  shallowMount, createLocalVue  from '@vue/test-utils'
import Component from './Component.vue'
import VueMeta from 'vue-meta'

let localVue = createLocalVue();
localVue.use(VueMeta);

describe('Component.vue', function() 
  // Set up the wrapper
  const wrapper = shallowMount(Component)

  it('has a getTitle() method that returns the page title', () => 
    expect(wrapper.vm.getTitle()).toBe(title)
  )

  it('has its meta title correctly set', () => 
    expect(wrapper.vm.$meta().refresh().metaInfo.title).toBe('some title')
  )
)

【讨论】:

以上是关于如何测试vue Js metaInfo的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jest 测试 Vue.js 组件中方法的错误

如何在 Vue.js/Nuxt.js 中为 RepositoryFactory 编写测试

如何测试 Vue.js mixin 的模板?

如何在 JEST 测试中模拟全局 Vue.js 变量

如何对第一个Vue.js组件进行单元测试 (上)

如何测试我的数据是不是更改? (Vue JS、Jest、单元测试)