Reactjs 仅在提供程序中的useEffect完成时运行测试

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

我有一个I18n提供程序,其构造如下:

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
不足以解决我的问题。