Запускайте тест только после использования useEffect в провайдере - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть провайдер 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, который не готов в первую очередьrender.

Как запустить тесты только при инициализации вышеупомянутого объекта?

1 Ответ

0 голосов
/ 07 ноября 2019
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>
}
...