仅在Provider中完成useEffect时运行测试

问题描述 投票:0回答:1

我有一个这样构造的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>
}

在我的Jest测试中,我想访问在I18next内部初始化的useEffect对象,该对象在第一次渲染时尚未准备好。

仅在初始化上述对象时如何运行测试?

reactjs jestjs use-effect
1个回答
0
投票
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> }
© www.soinside.com 2019 - 2024. All rights reserved.