ElementUI测试抛出ReferenceError:未定义_Message

时间:2019-08-24 15:53:07

标签: vue.js jestjs vue-test-utils element-ui

Bug report on ElementUI

我正在使用ElementUI组件的按需加载。我已正确按照说明进行操作,并且在运行该应用程序时效果很好。

当我尝试使用Jest和Vue测试实用工具进行测试时,就会出现问题。似乎找不到我要导入的组件,因此运行测试时出现此错误:

ReferenceError: _Message is not defined

我的测试碰到的其他任何组件都出现相同的错误。

在上面提到的错误报告中,建议我将babel配置未应用到测试环境中吗?或关于我的Jest配置。我已经尝试了各种方法来解决此问题:

  1. 进行手动模拟
  2. 监视组件
  3. 将整个ElementUI软件包导入我的测试中
  4. 更新Jest配置

似乎什么都没用,我也不知道怎么了...

bebel.config.js

module.exports = {
  presets: [
    '@vue/app',
  ],
  plugins: [
    [
      'component',
      {
        libraryName: 'element-ui',
        styleLibraryName: 'theme-chalk',
      },
    ],
  ],
};

jest.config.js

module.exports = {
  // roots: ['<rootDir>/src/', '<rootDir>/tests/'],
  moduleFileExtensions: [
    'js',
    'jsx',
    'json',
    'vue',
  ],
  transform: {
    '^.+\\.vue$': 'vue-jest',
    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
    '^.+\\.jsx?$': 'babel-jest',
  },
  transformIgnorePatterns: [
    '/node_modules/(?!element-ui)',
  ],
  moduleNameMapper: {
    '^@/(.*)$': '<rootDir>/src/$1',
    '^.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
  },
  snapshotSerializers: [
    'jest-serializer-vue',
  ],
  testMatch: [
    '**/tests/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)',
  ],
  testURL: 'http://localhost/',
  watchPlugins: [
    'jest-watch-typeahead/filename',
    'jest-watch-typeahead/testname',
  ],
  collectCoverage: true,
  coverageReporters: ['lcov', 'text-summary'],
};

1 个答案:

答案 0 :(得分:1)

在这里我为您提供一些建议:

在jest.config.js中更改

.csrf().disable()

这在babel.config.js中

module.exports = {
  moduleFileExtensions: [
    'js',
    'jsx',
    'json',
    'vue',
  ],
  transform: {
    '^.+\\.vue$': 'vue-jest',
    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
    '^.+\\.(js|jsx)?$': 'babel-jest'
  },
  moduleNameMapper: {
    '^@/(.*)$': '<rootDir>/src/$1',
    '^.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
  },
  snapshotSerializers: [
    'jest-serializer-vue',
  ],
  testMatch: [
    '**/tests/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)',
  ],
  testURL: 'http://localhost/',
  watchPlugins: [
    'jest-watch-typeahead/filename',
    'jest-watch-typeahead/testname',
  ],
  collectCoverage: true,
  coverageReporters: ['lcov', 'text-summary'],
};

我还认为纱线中需要module.exports = { presets: [ '@vue/app', ], plugins: [ [ 'component', { libraryName: 'element-ui', styleLibraryName: 'theme-chalk', }, ], ], "env": { "test": { "plugins": ["transform-es2015-modules-commonjs", "dynamic-import-node"] } } }; 。 让我知道这是否有效。