Reactjs 仅在提供程序中的useEffect完成时运行测试
我有一个I18n提供程序,其构造如下:Reactjs 仅在提供程序中的useEffect完成时运行测试,reactjs,jestjs,use-effect,Reactjs,Jestjs,Use Effect,我有一个I18n提供程序,其构造如下: export function LanguageProvider({ children }) { const lng = getLanguageFromPathname() const [langIsLoaded, setLangIsLoaded] = useState(false) useEffect(() => { const loadI18n = async () => { await i18next.u
export function LanguageProvider({ children }) {
const lng = getLanguageFromPathname()
const [langIsLoaded, setLangIsLoaded] = useState(false)
useEffect(() => {
const loadI18n = async () => {
await i18next.use(initReactI18next).init({
resources: {
source: sourceLanguage,
en: enLanguage,
ach: achLanguage,
},
lng,
fallbackLng: 'source',
})
setLangIsLoaded(true)
}
loadI18n()
}, [lng])
if (!langIsLoaded) {
return null
}
return <React.Fragment key={lng}>{children}</React.Fragment>
}
导出函数语言提供程序({children}){
const lng=getLanguageFromPathname()
const[langIsLoaded,setLangIsLoaded]=useState(false)
useffect(()=>{
const loadI18n=async()=>{
等待i18next。使用(initReactI18next).init({
资源:{
资料来源:sourceLanguage,
恩:英语,
ach:ach语言,
},
液化天然气,
回退:“源”,
})
setLangIsLoaded(真)
}
loadI18n()
}[液化天然气])
如果(!langIsLoaded){
返回空
}
返回{children}
}
在我的Jest测试中,我想访问I18next
对象,该对象在useffect
中初始化,在第一次渲染时尚未准备好
如何仅在初始化上述对象时运行测试?您必须注意中括号内的变量更改
you have to watch for variable changes in brackets in
useEffect(() => {},[variable])
export function LanguageLoader({ children }) {
const lng = getLanguageFromPathname()
const [langIsLoaded, setLangIsLoaded] = useState(false)
useEffect(() => {
const loadI18n = async () => {
await i18next.use(initReactI18next).init({
resources: {
source: sourceLanguage,
en: enLanguage,
sv: svLanguage,
},
lng,
fallbackLng: 'source',
})
setLangIsLoaded(true)
}
loadI18n()
})
if (!langIsLoaded) {
return null
},[i18next]
return <React.Fragment key={lng}>{children}</React.Fragment>
}
useEffect(()=>{},[变量])
导出函数LanguageLoader({children}){
const lng=getLanguageFromPathname()
const[langIsLoaded,setLangIsLoaded]=useState(false)
useffect(()=>{
const loadI18n=async()=>{
等待i18next。使用(initReactI18next).init({
资源:{
资料来源:sourceLanguage,
恩:英语,
sv:sv语言,
},
液化天然气,
回退:“源”,
})
setLangIsLoaded(真)
}
loadI18n()
})
如果(!langIsLoaded){
返回空
},[i18next]
返回{children}
}
没错,但不幸的是,将[lng]
添加到useffect
不足以解决我的问题。