У меня есть ловушка useEffect, которая загружается при монтировании компонента, например:
useEffect(() => {
listFiles().then(keys => {
setKeys(keys)
console.log(keys)
}).catch(err => {
showFail(err.message)
})
}, [])
Я пытаюсь протестировать функцию с помощью реагирующей библиотеки тестирования, просто используя функцию рендеринга:
beforeEach(() => {
render(<Dashboard />)
})
Однако, когда я запускаю любой тест, который разрешает обещание и устанавливает состояние:
jest.mock('../utils/storage', () => ({
listFiles: jest.fn(() => Promise.resolve([])),
}))
, я получаю странное предупреждение об использовании act
, чтобы обернуть событие :
Warning: An update to Dashboard inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at ..
in Dashboard
18 | useEffect(() => {
19 | listFiles().then(keys => {
> 20 | setKeys(keys)
| ^
21 | console.log(keys)
22 | }).catch(err => {
23 | showFail(err.message)
Я пытался обернуть рендер в act
, но он, похоже, ничего не меняет.
Есть предложения, что я здесь не так делаю? Должен ли я делать рендеринг другим способом?
Заранее спасибо!