笑话:TypeError:无法读取未定义的属性“变量”

Posted

技术标签:

【中文标题】笑话:TypeError:无法读取未定义的属性“变量”【英文标题】:Jest : TypeError: Cannot read property 'variable' of undefined 【发布时间】:2021-10-26 06:28:40 【问题描述】:

我正在 Vue 2.x、nuxtjs 和 @nuxtjs/composition-api 上测试 Jest。 但是,通过 jest 进行测试时,组件中的状态值具有未定义的值

List.spec.js

import Vue from 'vue';
import Vuetify from 'vuetify';
import  createLocalVue, shallowMount  from '@vue/test-utils';
import List from '@/components/home/list.vue';

Vue.use(Vuetify);

describe('List.vue', () => 
  const localVue = createLocalVue();
  let vuetify;

  const $t = () => ;
  const localePath = () => ;

  beforeEach(() => 
    vuetify = new Vuetify();
    localVue.use(vuetify);
  );

  const mockOrder = [
    
      coardshare: 
        cs_id: 123,
      ,
    ,
    
      talkboard: 
        cs_id: 123,
      ,
    ,
  ];

  it('11111', () => 
    const wrapper = shallowMount(List, 
      localVue,
      vuetify,
      propsData:  data: mockOrder ,
      mocks:  $t, localePath ,
      data() 
        return 
          data: mockOrder,
        ;
      ,
    );

    expect(wrapper.html()).toMatchSnapshot();
    const title = wrapper.find('.v-card__title > span');
    expect(title.text()).toBe('Foobar');
  );
);

List.vue

<template>
...
<div v-for="item in state.data.talkboard" :key="item.cs_id">
    <ListItem :item="item"></ListItem>
</div>
...
</template>
<script>
import  reactive, onMounted, useContext  from '@nuxtjs/composition-api';
import axios from 'axios';
import Header from './header';
import ListItem from './list-item.vue';

export default 
  name: 'ListHome',
  components: 
    Header,
    ListItem,
  ,
  setup() 
    const state = reactive(
      data: [],
    );

    const  store  = useContext();

    const fatch = async () => 
      ....
    ;

    onMounted(fatch);

    return 
      state,
      fatch,
    ;
  ,
;
</script>

错误信息

TypeError: Cannot read property 'data' of undefined

我正在 Vue 2.x、nuxtjs 和 @nuxtjs/composition-api 上测试 Jest。 但是,通过开玩笑进行测试时,组件中的状态值具有未定义的值 为什么这个错误?因为组合 API 使用 reactive() 函数定义状态??

【问题讨论】:

配合为什么我们为 vue js 标记了 react :-) 您是否尝试将组合 API 也导入到您的测试代码中?看起来这对别人有用。 ***.com/questions/60377091/… 是的,我试过了,但没用。我也导入了@nuxtjs/composition-api 和@vue/composition-api。但是一样 【参考方案1】:

在你的测试文件中,也许你可以尝试这样的事情:

it('11111', () => 
    const wrapper = shallowMount(List, 
      localVue,
      vuetify,
      propsData:  data: mockOrder ,
      mocks:  $t, localePath ,
      data: () => 
        return 
          data: mockOrder,
        ;
      ,
    );

【讨论】:

我试过了,但是不行。在vue测试utils网站(vue-test-utils.vuejs.org/api/options.html#data) data() 推荐

以上是关于笑话:TypeError:无法读取未定义的属性“变量”的主要内容,如果未能解决你的问题,请参考以下文章

反应笑话单元测试用例TypeError:无法读取未定义的属性'then'

Expo TypeError 的笑话模拟权限:无法读取未定义的属性“askAsync”

无法读取未定义的属性“getters” - 带有笑话的 VueJS 单元测试

如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?

TypeError:无法读取未定义的属性(读取“名称”)

TypeError:无法读取未定义的属性“findAll”(expressjs)