我正在为现有的 Vue 项目设置测试环境,我决定用 vue-test-utils 开个 Jest 。
一切都已安装并就位,但是当我导入组件时,我希望在 .test.js 文件中进行测试,并添加组件以测试实用程序,如下所示:
let wrapper = shallow(Home)
测试套件因错误而崩溃:TypeError: Cannot read property 'i18next' of undefined
。
我决定模拟 i18next 模块,但我在模拟方面遇到了问题。我的模拟看起来像这样:
jest.mock('i18next', () => ({
init: () => {},
use: () => {},
t: k => k
}));
但我总是得到错误:
TypeError: Cannot read property 'init' of undefined
35 |
36 | i18next
> 37 | .use(Locize)
38 | .init(i18nextOptions);
39 |
40 | export default new VueI18Next(i18next);
能否以某种方式解释模拟 i18next 模块以便我的包装器对象可以初始化的正确方法?另外,如果我做错了什么,请指出正确的方向。下面是完整的测试用例:
import { shallow, mount, createLocalVue } from '@vue/test-utils';
import Home from '../../src/app/pages/home/index/index.vue';
jest.mock('i18next', () => ({
init: () => {},
use: () => {},
t: k => k
}));
describe('Home Component', () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(Home);
});
it('something', () => {
console.log('bleh');
expect(wrapper.contains('div')).toBe(true);
});
});
谢谢。
最佳答案
错误 Cannot read property 'init' of undefined
发生在 i18next.use(Locize)
的结果上,而不是 i18next
目的。尝试将您的模拟更新为:
jest.mock('i18next', () => ({
use: () => {
init: () => {
t: k => k,
on: () => {}
}
}
}));
我用这个文件作为这个模拟的引用:panter/vue-i18next/src/i18n.js
关于unit-testing - 如何在 Jest 中模拟 i18next 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48789110/