-
Notifications
You must be signed in to change notification settings - Fork 231
Open
Labels
bugSomething isn't workingSomething isn't working
Description
react-hooks-testing-libraryversion: 7.0.1reactversion: 17.0.2react-domversion (if applicable): 17.0.2react-test-rendererversion (if applicable): N/Anodeversion: 14.17.3npm(oryarn) version: 6.14.3
Relevant code or config:
const React = require('react');
const Observable = require('zen-observable');
const {renderHook} = require('@testing-library/react-hooks');
function useObservable(observable) {
const [state, setState] = React.useState(null);
React.useEffect(() => {
const subscription = observable.subscribe((state) => setState(state));
return () => subscription.unsubscribe();
}, [observable, setState]);
return state;
}
it('lets you wait each update', async () => {
let observer;
const observable = new Observable((observer1) => (observer = observer1));
const {result, waitForNextUpdate} = renderHook(
() => useObservable(observable),
);
expect(result.current).toBe(null);
setTimeout(() => {
observer.next(1);
Promise.resolve().then(() => {
observer.next(2);
});
});
console.log(result.all.length); // => 1
await waitForNextUpdate();
console.log(result.all.length); // => 3
expect(result.current).toBe(1); // throws an error!
});What you did:
Hi, I’m currently trying to adopt testing-library/react-hooks to clean up Apollo Client’s test suite. One problem I’m having is that waitForNextUpdate() sometimes misses renders, especially when multiple state updates happen in additional microtasks.
What happened:
waitForNextUpdate() misses an update.
Reproduction:
See the code above.
Problem description:
See above.
Suggested solution:
The waitForNextUpdate() function seems to call wait() but I don’t understand why we can’t just return a promise whose resolve function is added to addResolver()?
https://github.com/testing-library/react-hooks-testing-library/blob/main/src/core/asyncUtils.ts#L86-L98
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working