首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行测试时,TypeError:无法对“(0,_GetTravelDatas.getTravelDatas)(.)”的属性“travelDatas”进行析构因为它是未定义的

运行测试时,TypeError:无法对“(0,_GetTravelDatas.getTravelDatas)(.)”的属性“travelDatas”进行析构因为它是未定义的
EN

Stack Overflow用户
提问于 2021-06-13 06:58:13
回答 1查看 3K关注 0票数 1

当我运行测试时,它会显示TypeError: run destructure属性'travelDatas‘of '(0,_GetTravelDatas.getTravelDatas)(.)’“因为它是未定义的.

如您所见,截图:单元测试

没有任何控制台错误或警告。

有人能帮忙吗?

travelListTest.spec.js

代码语言:javascript
复制
import { mount, shallowMount } from '@vue/test-utils'
import TravelList from '../../src/components/TravelList.vue'
import { getTravelDatas } from '../../src/composables/GetTravelDatas'
import ElementPlus from 'element-plus'

const wrapper = shallowMount(TravelList, {
  global: {
      plugins: [ElementPlus]
  }
})

jest.mock('../../src/composables/GetTravelDatas')

describe('TravelList Test', () => {
      test('click more will call GoToTravelDetailPage', () => {
        wrapper.vm.GoToTravelDetailPage = jest.fn()
        console.log(wrapper.html())
        wrapper.find('.el-button').trigger('click')
        expect(wrapper.vm.GoToTravelDetailPage).toHaveBeenCalled()
      })
})

TravelList.vue

代码语言:javascript
复制
.....
<script>
import { ref } from '@vue/reactivity';
import { useRouter } from "vue-router";
import { getTravelDatas } from '../composables/GetTravelDatas'
export default {
  name: 'TravelList',
  setup() {
    
    const { travelDatas } = getTravelDatas();
    const router = useRouter();

    function GoToTravelDetailPage(acctractionId) {
      router.push({ path: `/travelDetail/${acctractionId}` })
    }

    
    return { travelDatas, GoToTravelDetailPage };
  },
};
</script>

GetTravelDatas.js

代码语言:javascript
复制
import axios from "axios";
import { ref } from '@vue/runtime-core';

export function getTravelDatas() {
    const travelDatas = ref([])
        axios.get('https://localhost:5001/MyTravel/GetTravelData')
        .then((response) => {
        if (!response.data.success) {
            alert(response.data.errorMessage)
        }else{
            travelDatas.value = response.data.travelDetail
        }
        }).catch((error) => {
        alert('Unexpected Error: ', error.message)
        console.log(error)
        });
    return { travelDatas }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-13 09:10:22

您正在使用自动模拟版本来模拟GetTravelDatas模块,方法是:

代码语言:javascript
复制
jest.mock('../../src/composables/GetTravelDatas')

这意味着从该模块导出的所有方法都将被模拟(方法的真正代码将不会被调用),而模拟版本在调用时将返回未定义的内容。

在您正在测试的代码中,您有:

代码语言:javascript
复制
const { travelDatas } = getTravelDatas();

从未定义的travelDatas属性中读取将导致所看到的错误。

您应该模拟getTravelDatas方法,以便它返回适当的数据。例如,返回空数组如下所示:

代码语言:javascript
复制
getTravelDatas.mockReturnValue([]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67955672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档