В модульном тесте Jest неопределенный магазин Vuex - PullRequest
0 голосов
/ 14 октября 2019

Я новичок в шутке и пытаюсь написать модульный тест, основанный на значении свойства магазина.

Я пытался создать новое тестовое хранилище в моем тесте (у меня уже есть макетхранить для другого теста), но по какой-то причине я получаю ошибку

TypeError: Cannot read property 'state' of undefined

Мои тесты:

import { shallowMount, createLocalVue,} from '@vue/test-utils';
import userButtons from '@components/user-profile/UserButtons.vue';
import Vuex from 'vuex';
import { defaultValues, } from '@store/api/userButtons.js';

const localVue = createLocalVue();
localVue.use(Vuex);

describe('UserButtons', () => {
  let actions; 
  let store;
  let storeIsAdded;

  beforeEach(() => {
    actions = {
      getUserInfo: jest.fn(),
    };
    store = new Vuex.Store({
      modules: {
        userButtons: {
          namespaced: true,
          actions,
          state: {
            userButton: defaultValues,
          },
          mutations: {
            setUserButton: jest.fn(),
          },
        },
      },
    });
    storeIsAdded = new Vuex.Store({
      state: {
        isItemAdded: true,
      },
    });
  });
  test('vuex called on create', () => {
    shallowMount(UserButtons, { store, localVue, propsData: { id: 3406304, }, });
    expect(actions.getUserInfo).toHaveBeenCalled();
  });

  test('renders correctly', () => {
    const wrapper = shallowMount(UserButtons, { store, localVue, propsData: { id: 3406304, }, });
    expect(wrapper.element).toMatchSnapshot();
  });

  test('indicates remove if isItemAdded is true', () => {
    const wrapper = shallowMount(UserButtons, { storeIsAdded, localVue, propsData: { id: 3406304, }, });
    expect(wrapper.find('.button-action.my-items').text()).toBe('- Remove from My Items');
  });
});

Первые два теста, которые просто используют defaultValues ​​для моегоstore, pass.

Последний тест, 'indicates remove if isItemAdded is true', - это тот, который не прошел и использует фиктивный магазин, storeIsAdded.

Если у кого-то есть понимание, было бы оченьприветствуется !!!

РЕДАКТИРОВАТЬ:

Даже если я изменю свой макет магазина так, чтобы он больше походил на магазин, который, кажется, работает, например:

storeIsInList = new Vuex.Store({
  modules: {
    userButton: {
      namespaced: true,
      actions,
      state: {
        userButton: {
          isItemAdded: true,
        },
      },
    },
  },
});

Я получаю ту же ошибку.

...