Closed
Description
Hey there 👋
I'm getting an act
warning when using react-query hooks because of this:
Basically what's happening is my component finishes rendering and then react-query triggers a re-render (thanks to this) which is the thing that's giving me the act warning.
Now I can add an await waitFor(() => {})
call to the end of my test and the warning goes away, but I think it would be better to have an assertion in that callback. I'm just not sure what to assert happened as a result of the state update.
Do you have any suggestions for people testing this stuff? Should I just set the staleTime
to Infinity
? Kinda thinking that might work except then my tests would have a different config from my app which could lead to some problems.
Any ideas?
Metadata
Metadata
Assignees
Labels
No labels
Activity
tannerlinsley commentedon Mar 20, 2020
kentcdodds commentedon Mar 20, 2020
I think this would help!
kentcdodds commentedon Mar 20, 2020
Yes, I just tried this and it worked well for me:
And that worked. However, I observed that if I put that
afterEach
in mysetupTests.js
file, it didn't clear the cache soon enough, so I'm thinking that upping the stale timeout a bit may help with that, though that seems like it could lead to some hacks, so what's probably better is to just put thequeryCache.clear()
call inside the test itself which does not sound like a lot of fun...Either way, I think adding that if check to the dispatch function would be necessary.
I also did notice that the
rerender
call inonStateUpdate
is already usinguseMountedCallback
so that should be fine. We get the warning just when there's an unexpected setState update when the component is still mounted. So maybe if there's something we can assert so we can wrap that in awaitFor
that would be better.Still working through this...
kentcdodds commentedon Mar 20, 2020
Question... Why are we triggering a re-render anyway?
tannerlinsley commentedon Mar 20, 2020
kentcdodds commentedon Mar 20, 2020
Whoops, didn't mean to close
kentcdodds commentedon Mar 20, 2020
I thought it was something like that...
I'm just trying to think of whether there's anything I can assert so I can put that within the
waitFor(() => {/* expect right here */})
but there's nothing observable in the DOM that changes here and I can't think of anything in the query cache I could assert either... Hmmm....tannerlinsley commentedon Mar 20, 2020
kentcdodds commentedon Mar 20, 2020
I'm making a PR for the dispatch thing right now :)
clear stale timeout when removing queries
clear stale timeout when removing queries (#271)
14 remaining items