простое тестирование компонента vue с ошибкой - PullRequest
1 голос
/ 18 июня 2020

Я впервые использую шутку, и я пытаюсь заставить меня работать правильно, прежде чем я начну тяжелые испытания. для начала я просто тестировал это:

import { mount, createLocalVue } from '@vue/test-utils';
import VueRouter from 'vue-router';
import Vuex from 'vuex';
import BootstrapVue from 'bootstrap-vue';
import UsersList from './../../components/users/UsersList.vue';

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


describe('Foo', () => {
  it('renders a div', () => {
    const wrapper = mount(UsersList, {
      localVue
    })
    expect(wrapper.contains('div')).toBe(true)
  })
})

в конце он должен пройти успешно, потому что, конечно, я использовал div в своем компоненте.

но проблема теперь в том, Vuex, или я не знаю. похоже, что эта шутка не может обрабатывать мои ссылки vuex $ store.state. TypeError: Cannot read property 'state' of undefined и после этого: [Vue warn]: Error in render: "TypeError: Cannot read property 'resolve' of undefined"

моя конфигурация выглядит так:

jest.config. js:

/* eslint-disable no-undef */
// For a detailed explanation regarding each configuration property, visit:
// https://jestjs.io/docs/en/configuration.html
module.exports = {
  verbose: true,
  moduleFileExtensions: [
    'js',
    'json',
    // tell Jest to handle `*.vue` files
    'vue',
  ],
  transform: {
    // process `*.vue` files with `vue-jest`
    '^.+\\.js$': 'babel-jest',
    '.*\\.(vue)$': 'vue-jest',
  },
  moduleNameMapper: {
    '\\.(jpg|ico|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
      '<rootDir>/mocks/fileMock.js',
    '\\.(css|less|scss)$': '<rootDir>/mocks/styleMock.js',
  },
  clearMocks: true,
};

1 Ответ

1 голос
/ 18 июня 2020

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

import { shallowMount, createLocalVue } from '@vue/test-utils';
import VueRouter from 'vue-router';
import Vuex from 'vuex';
import BootstrapVue from 'bootstrap-vue';
import UsersList from './../../components/users/UsersList.vue';

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

describe('UsersList.vue', () => {
  let store;
  const state = {
    User: {
      id: 1,
    },
  };

  beforeEach(() => {
    store = new Vuex.Store({
      state,
    });
  });

  it('renders a div', () => {
    const wrapper = shallowMount(UsersList, {
      store,
      localVue,
    });
    expect(wrapper.contains('div')).toBe(true);
  });
});

Я определил себе состояние насмешек, и это сделало маги c

const state = {
    User: {
      id: 1,
    },
  };
...