在使用 jest 的 vue 测试中找不到模块 '@jest/globals'



我正在尝试从项目中的 vue 文档中编写一个非常简单的测试。 我可以在我的项目中开玩笑地运行测试,但是一旦我尝试用开玩笑模拟 axios 请求,我就会出现此错误:

FAIL  tests/unit/test.spec.js

● 测试套件运行失败

Cannot find module '@jest/globals' from 'test.spec.js'
14 |   })
at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:259:17)
at _getJestObj (tests/unit/test.spec.js:16:7)
at Object.<anonymous> (tests/unit/test.spec.js:3:1)

这是我的 Foo 组件:

<template>
<button @click="fetchResults">{{ value }}</button>
</template>
<script>
import axios from 'axios'
export default {
data() {
return {
value: null
}
},
methods: {
async fetchResults() {
const response = await axios.get('mock/service')
this.value = response.data
}
}
}
</script>

和相关的测试:

import { shallowMount } from '@vue/test-utils'
import Foo from './Foo'
jest.mock('axios', () => ({
get: Promise.resolve('value')
}))
it('fetches async when a button is clicked', done => {
const wrapper = shallowMount(Foo)
wrapper.find('button').trigger('click')
wrapper.vm.$nextTick(() => {
expect(wrapper.text()).toBe('value')
done()
})
}

任何帮助将不胜感激:) 谢谢大家!

假设您也在使用babel-jest,请确保将两个版本的jestbabel-jest设置为相同的数字(24,26' 等(。我遇到了同样的问题,这是因为软件包版本不同步。


如果您使用的是 npm7+,则会自动安装对等依赖项,并且您最终可能会同时使用两个不同版本的babel-jest。您可以通过添加

legacy-peer-deps=true

.npmrc文件中。

就我而言,此错误发生在 babel-jest@26.0.1 中。降级到 babel-jest@21.2.0 后,问题消失了。

我遇到了同样的问题。修复了将开玩笑库的版本降低到与ts-jest相同的问题:

"@jest/globals": "29.1.1",
"jest": "29.1.1",
"jest-environment-jsdom": "29.1.1",
"ts-jest": "29.1.1"

最新更新