Jest + Nuxt + Nuxt-Fire 在测试套件中失败

Posted

技术标签:

【中文标题】Jest + Nuxt + Nuxt-Fire 在测试套件中失败【英文标题】:Jest + Nuxt + Nuxt-Fire is failing in test suite 【发布时间】:2019-05-21 22:46:51 【问题描述】:

我正在使用 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) 没有在测试套件中加载的问题 【参考方案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 而无需测试它是否被调用。

【讨论】:

以上是关于Jest + Nuxt + Nuxt-Fire 在测试套件中失败的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jest 测试中使用 nuxt 运行时配置变量

在 Nuxt、Vue、jest 和 Vuetify 中为项目编写单元测试

如何使用 jest 在 nuxt.js 中测试 head()

Nuxt.js 中的 Jest 全局插件

如何用 jest 测试 nuxt?

使用 Nuxt 和 Jest 进行集成测试