我已经开始用Vitest替换Jest,用于我的Vue 3应用程序中的单元测试库。
我试图为一个使用vue-i18n库来翻译其中文本的组件编写单元测试,但当我试图在测试文件中挂载此组件时,它失败并出现错误:
参考错误:t未定义
使用vitest库编写测试时,从import { useI18n } from 'vue-i18n'
中存根/模拟t
的正确方法是什么?
请注意,从Vue 2升级到Vue 3并不起作用:
const wrapper = shallowMount(MyComponent, {
global: {
mocks: {
$t: () => {}
}
}
})
以下是一些值得注意的软件包版本列表:
"vue": "^3.2.31",
"vue-i18n": "^9.2.0-beta.14",
"vite": "^2.9.0",
"vitest": "^0.10.2"
谢谢!
6条答案
按热度按时间mbzjlibv1#
我想你想在全球范围内模拟它,不需要在每个测试套件中放置相同的代码。
inn6fuwd2#
ogsagwnx3#
Panos Vakalopoulos的回答对我很有效。
代码可以在全球运行。
参见https://test-utils.vuejs.org/migration/#no-more-createlocalvue
请注意,如果您使用全局配置作为
$t
,Luckylooke的答案将工作。oyxsuwqo4#
我读了this tutorial,它教我模仿 vue-router,然后我为 * vue-i18 n * 做了一个类似的解决方案,它工作了。
Component (HelloWorld.vue)
Test
你可以看到,它适用于
t
和$t
。这不是理想的方式。总有一天,我会努力弄清楚如何在全球范围内进行每项测试。
nxagd54h5#
成分API的全球解决方案:
mpgws1up6#
如果您使用的是composition API,而获取
$setup.t
不是一个函数,这是因为您可能在测试设置中错误地配置了createI18n
示例:请注意,您需要添加
legacy: false
和allowComposition: true
才能使用composition API,否则$setup.t
将不会被定义,您将得到$setup.t
不是函数错误。