Jest.js 从vue测试检测全局http方法时出错

pbpqsu0x  于 2022-12-08  发布在  Jest
关注(0)|答案(1)|浏览(137)

我正在运行vue3,并使用vue测试实用程序库测试一个vue组件,在该组件中,我进行了如下所示的api调用:

const api = this.$http.publisher.fetchValidatedWebsites();

我注册了这个全局http变量

app.config.globalProperties.$http =  HttpServiceFactory(HttpClient);

HttpServicefactory返回如下发布者:

const httpServiceFactory = (HttpClient) => ({
    publisher: PublisherService(HttpClient),
});

在PublisherService中有fetchValidatedWebsites()方法;但是当我做测试的时候

expect(wrapper.vm.$http.publisher.fetchValidatedWebsites)
            .toHaveBeenCalledTimes(1);

我得到这个错误:

TypeError: Cannot read property 'fetchValidatedWebsites' of undefined

似乎由于某种原因,vm无法识别此变量。
在我的包.Json:

"vue": "^3.2.12",
    "@vue/test-utils": "^2.0.0-rc.21"

我该怎么解决这个问题?

nimxete2

nimxete21#

您需要在vue-test-utils配置中将$http注册为全局模拟。
请尝试以下内容:

import { config } from '@vue/test-utils'

config.global.mocks = {
  $http: (HttpClient) => ({
    publisher: PublisherService(HttpClient),
  })
}

相关问题