gpt4 book ai didi

reactjs - 如何在 Jest 中模拟react-i18next和i18n.js?

转载 作者:行者123 更新时间:2023-12-03 13:23:51 26 4
gpt4 key购买 nike

package.json

"moduleNameMapper": {
"i18next": "<rootDir>/__mocks__/i18nextMock.js"
}

i18n.js

import i18n from 'i18next'
import XHR from 'i18next-xhr-backend'
// import Cache from 'i18next-localstorage-cache'
import LanguageDetector from 'i18next-browser-languagedetector'

i18n
.use(XHR)
// .use(Cache)
.use(LanguageDetector)
.init({
fallbackLng: 'en',
// wait: true, // globally set to wait for loaded translations in translate hoc
lowerCaseLng: true,
load: 'languageOnly',
// have a common namespace used around the full app
ns: ['common'],
defaultNS: 'common',
debug: true,

// cache: {
// enabled: true
// },

interpolation: {
escapeValue: false, // not needed for react!!
formatSeparator: ',',
format: function (value, format, lng) {
if (format === 'uppercase') return value.toUpperCase()
return value
}
}
})

export default i18n

i18nextMock.js

/* global jest */
const i18next = jest.genMockFromModule('react-i18next')
i18next.t = (i) => i
i18next.translate = (c) => (k) => k

module.exports = i18next

由于某种原因,jest 单元测试没有获取组件。

这是一个单元测试:

import React from 'react'
import { Provider } from 'react-redux'
import { MemoryRouter } from 'react-router-dom'
import { mount } from 'enzyme'

import { storeFake } from 'Base/core/storeFake'
import Container from '../container'

describe('MyContainer (Container) ', () => {
let Component;

beforeEach(() => {
const store = storeFake({})

const wrapper = mount(
<MemoryRouter>
<Provider store={store}>
<Container />
</Provider>
</MemoryRouter>
)

Component = wrapper.find(Container)
});

it('should render', () => {
// Component is undefined here
expect(Component.length).toBeTruthy()
})
})

最佳答案

您不需要模拟 t 函数,只需要 translate 函数。对于第二个,您对参数的使用很困惑,而且您需要返回一个组件。

我能够让它在我的项目中发挥作用。这是我的模拟文件和 Jest 配置

Jest 配置

"moduleNameMapper": {
"react-i18next": "<rootDir>/__mocks__/reacti18nextMock.js"
}

模拟react-i18next的源代码

/* global jest */
import React from 'react'

const react_i18next = jest.genMockFromModule('react-i18next')

const translate = () => Component => props => <Component t={() => ''} {...props} />

react_i18next.translate = translate

module.exports = react_i18next

关于reactjs - 如何在 Jest 中模拟react-i18next和i18n.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45020842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com