vue test utils TypeError:无法解构“未定义”或“空”的属性“config”

김은솔*_*김은솔 5 vue-test-utils

我正在使用 vue test utils 进行简单的单元测试。但它不起作用。我不知道....帮帮我

我安装了这些东西.....

> $ npm i -D jest @vue/test-utils vue-jest jest-serializer-vue babel-jest babel-core@bridge

> $ npm i -D @babel/core @babel/preset-env
Run Code Online (Sandbox Code Playgroud)

我做了jest.config.js文件

module.exports = {
  moduleFileExtensions: [
    'vue',
    'js'
  ],

  moduleNameMapper: {
    '^~/(.*)$': '<rootDir>/src/$1'
  },

  modulePathIgnorePatterns: [
    '<rootDir>/node_modules',
    '<rootDir>/dist'
  ],

  testURL: 'http://localhost',

  transform: {
    '^.+\\.vue$' : 'vue-jest',
    '^.+\\.jsx?$' : 'babel-jest'
  }
}
Run Code Online (Sandbox Code Playgroud)

和测试/Parent.test.js

import { mount } from '@vue/test-utils'
import Parent from './Parent.vue'

test('Mount', () => {
  const wrapper = mount(Parent)
  expect(wrapper.html()).toBe('')
})
Run Code Online (Sandbox Code Playgroud)

但是 npm run test:unit 错误是这样的

 FAIL  tests/Parent.test.js
  ? Test suite failed to run

    TypeError: Cannot destructure property `config` of 'undefined' or 'null'.

      at Object.getCacheKey (node_modules/vue-jest/lib/index.js:10:5)
      at ScriptTransformer._getCacheKey (node_modules/@jest/transform/build/ScriptTransformer.js:280:41)
      at ScriptTransformer._getFileCachePath (node_modules/@jest/transform/build/ScriptTransformer.js:351:27)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:588:32)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:758:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:815:19)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        0.512 s
Ran all test suites.
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

N'B*_*yev 18

该包正在放弃语义版本控制,以支持各种 Vue 版本(2.x、3.x)和 Jest 版本(26.x、27.x)。因此,如果您使用Vue 3.xJest 27.x,则需要安装vue3-jest,而不是vue-jest

npm i vue3-jest -D

# or

yarn add vue3-jest --dev
Run Code Online (Sandbox Code Playgroud)

然后,jest.config.js按如下方式更新您的:

module.exports = {
  moduleFileExtensions: ['vue', 'js', 'json', 'jsx'],
  testEnvironment: 'jsdom',
  transform: {
    '^.+\\.vue$': 'vue3-jest',
    '^.+\\js$': 'babel-jest',
  },
}
Run Code Online (Sandbox Code Playgroud)

在撰写此答案时,包命名和版本控制如下所示:

在此输入图像描述

您可以在此处阅读有关新命名和版本控制策略的更多信息。


Mat*_*OUL 9

在尝试让 Vue3、Jest 和 Typescript 一起工作时遇到了同样的问题。这就是我设法让它发挥作用的方法。这是一个将行星与依赖关系对齐的问题。

  • 首先,我建议清除 package.json 中任何开玩笑提到的依赖项(特别是如果像我一样,您花几天时间尝试在拿着马蹄铁表演雨舞时放置和删除依赖项)。

  • 添加到 package.json
    "devDependencies": { "@babel/core": "^7.14.5", "@babel/preset-env": "^7.14.7", "babel-core": "^7.0.0-bridge.0", "typescript": "^4.3.5", "@vue/test-utils": "^2.0.0-rc.9", "jest": "^26.5.6", "ts-jest": "^26.5.6", "babel-jest": "^26.5.6", "vue-jest": "^5.0.0-alpha.10", "@vue/cli-plugin-unit-jest": "5.0.0-beta.2" } (确保此依赖项具有相同的版本:jest、ts-jest 和 babel-jest)

  • 仍然在 package.json 添加脚本"scripts": { "test": "jest" },

  • 尼普我

  • npm 运行测试

对我来说它现在正在工作。希望它可以帮助别人。


小智 6

如果您使用的是 jest 的 27 版,请尝试降级到 26 版。确保将 babel-jest 和 ts-jest 也降级到 26 版。我收到以下错误,这对我来说是正确的:

无法解构 'undefined' 的属性 'config',因为它是未定义的。

  • 这是一个很好的线索,对我来说,我使用的是 Jest 27,但我也需要将它的伴侣 `babel-jest` 更新为 27,因为它仍然是 24。更新后它开始工作。 (2认同)