首页 新闻 会员 周边

vue2.7 项目植入JEST 模块,执行npm run jest 提示 “Test suite failed to run ReferenceError: sessionStorage is not defined”?

0
悬赏园豆:10 [已解决问题] 解决于 2022-11-11 09:31

VUE2.7 植入JEST模块,运行后报错

  • 环境:win10
  • node:v12.6
  • vue:v2.7

运行下面的命令能够正常进行测试

"test:unit": "jest --clearCache && vue-cli-service test:unit",

但是运行jest就会提示下面的错误:

FAIL  src/tests/unit/index.spec.js
  ● Test suite failed to run

    ReferenceError: sessionStorage is not defined

      15 | import Mock from 'mockjs';
      16 | import { CONSTANT_PORT_TYPE_LIST, CONSTANT_NODE_TYPE_LIST } from '../components/constant';
    > 17 | const storage = sessionStorage;
         |                 ^
      18 | export default {
      19 |   namespaced: true,
      20 |   state() {

      at Object.sessionStorage (src/views/panel/modules/index.js:17:17)
      at Object.<anonymous> (src/store/index.js:10:1)

JEST.config配置

const { defaults } = require('jest-config');
module.exports = {
  verbose: true,
  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'
  },
  moduleNameMapper: {
    '^@/(.*)$': '<rootDir>/src/$1'
  },
  snapshotSerializers: ['jest-serializer-vue'],
  testMatch: [
    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
  ],
  setupFiles: ['<rootDir>/src/tests/unit/setup'], // 类似 webpack.entry
  collectCoverageFrom: [ // 类似 webpack 的 rule.include
    'src/**/*.{js,vue}',
    '!src/main.js',
    '!src/router/index.js',
    '!src/store/index.js',
    '!**/node_modules/**',
  ],
  coverageDirectory: '<rootDir>/src/tests/unit/coverage',
  'collectCoverage': false,
  'coverageReporters': [
    'lcov',
    'text-summary'
  ],
}

JEST setup文件

import Vue from 'vue';
import _ from 'lodash';

Vue.config.productionTip = false;

如果在setup文件中设置以下,就不会报错,但是会报出其他关键方法或对象不存在

const sessionStorageMock = {
  getItem: function () { return "{}" },
  setItem: jest.fn(),
  clear: jest.fn()
};
global.sessionStorage = sessionStorageMock;

哪位大神有遇到类似问题。

徐大腿的主页 徐大腿 | 菜鸟二级 | 园豆:420
提问于:2022-07-18 14:47
< >
分享
最佳答案
0

报错如下图所示:
image.png
解决方式:
1,安装Babel转换器: npm install babel-jest @babel/core @babel/preset-env -D
2,在项目根目录下新建一个.babelrc的文件,配置如下所示。

{
"presets": [
[
"@babel/preset-env", {
"targets": {
"node":"current"
}
}
]
]
}
3,再重新执行 =》npm run test
image.png

就可以执行成功了

收获园豆:10
wangruidong03 | 初学一级 |园豆:136 | 2022-07-24 09:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册