【问题标题】:Jest + Nuxt + Nuxt-Fire is failing in test suiteJest + Nuxt + Nuxt-Fire 在测试套件中失败
【发布时间】:2026-01-05 02:25:01
【问题描述】:

我正在使用 Nuxt 和 Nuxt-Fire (https://github.com/lupas/nuxt-fire)

当我启动测试时,我收到此错误[Vue warn]: Error in config.errorHandler: "TypeError: Cannot read property 'ref' of undefined"

发生这种情况是因为我的应用程序中的这个部分

mounted() {
    this.initiate(window.instaroomId)

    let connected = this.$fireDb.ref(".info/connected")
    this.getConnection(connected)
},

看起来 this.$fireDb 没有被调用。该模块通常加载在 nuxt.config.js 中。我怎样才能做到这一点?

【问题讨论】:

  • 能否也提供您的测试用例的内容?
  • 我之所以关注,是因为我有另一个库 (@nuxt/axios) 没有在测试套件中加载的问题

标签: vue.js vuejs2 jestjs nuxt.js


【解决方案1】:

如果你想测试,this.$fireDb.ref(".info/connected") 被调用,你可以像这样模拟它:

import { shallowMount } from '@vue/test-utils'
import SomeComponent from '@/components/SomeComponent/SomeComponent.vue'

let wrapper

describe('SomeComponent.vue Test', () => {
  beforeEach(() => {
    wrapper = shallowMount(SomeComponent, {
      mocks: {
        $fireDb: {
          ref: jest.fn()
        }
      }
    })
  })
  it('$fireDb.ref was called', () => {
    expect(wrapper.vm.$fireDb.ref).toBeCalled()
    expect(wrapper.vm.$fireDb.ref).toBeCalledWith('.info/connected')
  })
})

或者,如果您希望测试只是通过 created() 挂钩并测试另一个功能,您可以模拟 $fireDb.ref 而无需测试它是否被调用。

【讨论】: