我的代码工作正常,但是在设置单元测试和测试时遇到了问题。使用i18next库编写代码时出现错误,有人可以提出建议吗?
下面的配置来自here
错误
TypeError:无法读取未定义的属性'init'
7 | i18next > 8 | .init({ | ^ 9 | interpolation: { 10 | escapeValue: false, 11 | },
Helper.tsx
export function validation(controlName: string){
var messages = require('src/translations/i18next');
var requireMessage=messages.t('required');
//omit irelevant code
}
Helper.test.tsx
test('Validation',()=>{
expect(Helper.validation('My Name')).toBe('aaaaa');
})
mock-setup.js
jest.mock('i18next', () => ({
use: () => {
return {
init: () => { }
};
},
t: k => k
}));
jest.config.js
module.exports = {
verbose: true,
'roots': [
'<rootDir>/src'
],
'transform': {
"^.+\\.(js)$": "<rootDir>/node_modules/babel-jest",
"^.+\\.tsx?$": "ts-jest"
},
'testRegex': '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$',
'moduleFileExtensions': [
'ts',
'tsx',
'js',
'jsx',
'json',
'node'
],
'moduleNameMapper': {
'^src/(.*)': '<rootDir>/src/$1',
'^components/(.*)': '<rootDir>/src/components/$1'
},
'snapshotSerializers': ['enzyme-to-json/serializer'],
'setupFiles': ['<rootDir>/src/jest/setupEnzyme.ts',
'<rootDir>/src/jest/mock-setup.js',
],
'moduleDirectories': ['node_modules', 'src']
}
i18next.tsx
import i18next from 'i18next';
var common_en = require( "src/translations/en/common.json");
var common_es = require( "src/translations/es/common.json");
i18next
.init({
interpolation: {
escapeValue: false,
},
lng: 'en', // 'en' | 'es'
resources: {
en: {translation: common_en},
es: {translation: common_es},
},
debug: true,
})
export default i18next;
tsconfig.json
{
"compilerOptions": {
"lib": [ "es2015","dom" ],
"target": "es5",
"module": "commonjs",
"esModuleInterop": true,
"jsx": "react",
"sourceMap": true,
"baseUrl": ".",
"allowSyntheticDefaultImports": true,
"paths": {
"src/*": ["src/*"],
"components/*": ["src/components/*"]
}
}
}
答案 0 :(得分:0)
看起来您应该像这样嘲笑i18next
:
jest.mock('i18next', () => ({
init: () => {},
t: k => k
}));
详细信息
问题中的模拟程序设置为使用i18next
,如下所示:
import i18next from 'i18next';
i18next
.use(...)
.init(...);
由于您没有使用.use
,因此可以直接模拟.init
。
答案 1 :(得分:0)
任何人都可以对此提出建议吗?我还是很困惑!我更改此行后,错误消失了
import i18next from 'i18next';
到
import * as i18next from 'i18next';