无法测试Vue组件,因为未定义Vue实例

时间:2019-10-20 12:29:19

标签: vue.js google-analytics vuejs2 jestjs vue-test-utils

我有一个使用过的Vue Analytics的Vue应用程序,该应用程序创建了this.$ga.page方法来进行页面跟踪。现在,我需要使用Jest测试我的组件,但是它说this.$ga.page没有定义。我正在main.js中初始化Vue Analytics。

如何在测试文件中的组件之前添加main.js?我知道我们需要在beforeEach方法中添加它,但是我不知道该怎么做。

Vue Analytics init main.js

import VueAnalytics from 'vue-analytics'

Vue.use(VueAnalytics, {
  id: 'UA-150437966-1'
})

我的首页测试

import { mount } from '@vue/test-utils'
import Homepage from '../../src/Pages/Homepage'


describe('Homepage', () => {
    const wrapper = mount(Homepage)

    it('has a button', () => {
        expect(wrapper.contains('button')).toBe(true)
    })
})

Homepage.vue摘录

created: function() {
    //analytics

    this.$ga.page({
      page: "/",
      title: "Home page",
      location: window.location.href
    });
  }
};

我遇到错误

Homepage › encountered a declaration exception

    TypeError: Cannot read property 'page' of undefined

      67 |     //analytics
      68 | 
    > 69 |     this.$ga.page({

1 个答案:

答案 0 :(得分:0)

Vue Test Utils建议在localVue中设置插件,以避免污染全局Vue。看起来像这样:

import { localVue, mount } from '@vue/test-utils'
import Homepage from '@/components/Homepage'

localVue.use(VueAnalytics, { id: 'UA-150437966-1' })

describe('Homepage', () => {
  let wrapper = null

  beforeEach(() => {
    wrapper = mount(Homepage, {
      localVue,
    })
  })

  // ...
})

另一方面,如果在测试中是否修改了全局Vue,则可以使用setupTestFrameworkScriptFile设置Jest 23.x环境:

// jest.config.js
module.exports = {
  setupTestFrameworkScriptFile: '<rootDir>/tests/jest-setup.js',
}

在设置文件中,您可以初始化Vue Analytics:

// <rootDir>/tests/jest-setup.js
import Vue from 'vue'
import VueAnalytics from 'vue-analytics'

Vue.use(VueAnalytics, {
  id: 'UA-150437966-1'
})