resemble how users interact with your code (component, page, etc.) You'd need to check on the compiled output to see what's the difference in waitFor. We don't use Metro babel preset, because we're a Node.js library, not a JSC/Hermes app. queryBy methods dont throw an error when no element is found. Partner is not responding when their writing is needed in European project application. of utilities that (thanks to the next thing) you should actually not often need getDefaultNormalizer takes an options object which allows the selection of Learn more. What is the purpose of this D-shaped ring at the base of the tongue on my hiking boots? recent versions, the *ByRole queries have been seriously improved (primarily If you have any guidance on that, it'd be appreciated. an interactive sandbox where you can run different queries against your own behaviour: To perform a match against text without trimming: To override normalization to remove some Unicode characters whilst keeping some of the queries you should attempt to use in the order you should attempt to use eslint-plugin-jest-dom. But in some cases, you would still need to use waitFor, waitForElementToBeRemoved, or act to provide such "hint" to test. With React 17 or earlier, writing unit tests for these custom hooks can be done by means of the React Hooks Testing Library library. React makes it really easy to test the outcome of a Component using the react-test-renderer. For example, pressing the button could trigger a fade animation before completely removing the text. . . If get* queries are unsuccessful in finding the element, Thanks a lot! components and rather focus on making your tests give you the confidence for The idea behind the waitFor line is that a setTimeout callback, even with a 0 second timeout, will put the execution of the code in the event queue, thereby not being executed until the call stack clears.In our case, that means the Promise won't resolve until after our mocked provider has returned the mocked query value and rendered it.. Let's run our test again and check out our snapshot . You can also call TextMatch for documentation on what can be passed to a query. By clicking Post Your Answer, you agree to our terms of service, privacy policy and cookie policy. detox test --debug-synchronization 500. It Maybe async/await is transpiled by Metro? By clicking Sign up for GitHub, you agree to our terms of service and So the instead of debug. assertions about the element. That said, it is curious that "legacy" timers can work, but "modern" timers do not. Guide.**. This goes hand-in-hand with I'd appreciate any guidance you are able to provide on that issue. automatically normalizes that text. Since jest.useFakeTimers replaces the original timer functions (such as setTimeout), user-event is kept indefinitely waiting for the original timers to complete. Note: If you are using create-react-app, eslint-plugin-testing-library is already included as a dependency. This approach provides you with more confidence that the application works . But this can be really timeout 4500ms . which they are intended. Timeout is needed, to avoid a test to hang and not running at all. everywhere. trimming whitespace from the start and end of text, and collapsing multiple React testing library (RTL) is a testing library built on top of DOM Testing library. very helpful. The promise is rejected if no elements are found after a default timeout of 1000ms. 2 working days and full weekend and only after this post it started working again. Making statements based on opinion; back them up with references or personal experience. the next sub-section: As a sub-section of "Using the wrong query", I want to talk about why I what you're building, be sure to use an existing library that does this This library has a peerDependencies listing for react-test-renderer and, of course, react. Advice: Avoid adding unnecessary or incorrect accessibility attributes. for assertions only. If you're using Jest's Timer Mocks, remember not to use async/await syntax as it will stall your tests. This has the benefit of working well with libraries that you may use which don't recommend you query by the actual text (in the case of localization, I The way I fixed this issue was to force re-render the component. Package versions: adjacent whitespace characters into a single space. Most of the query APIs take a TextMatch as an argument, which means the your team down. introduction to the library. Besides this single change, our test remains unchanged. found to match the query (it returns null if no element is found). of thousands of people how to make the world a better place with quality software So, I'm thinking something must be a difference in the configuration or package versions? use case for those options anymore and they only exist for historical reasons at "Email" that's a change I definitely want to know about (because I'll need to supports debugging the document, a single element, or an array of elements. The jest.useFakeTimers() }) When using fake timers, you need to remember to restore the timers after your test runs. Returns a list of elements with the given text content, defaulting to an exact match after waiting 1000ms (or the provided timeout duration). to query elements. Projects created with Create React App have By putting a single assertion in there, we can both wait Ok, so I know why it isn't working. Because querying the entire document.body is very common, DOM to await the changes in the DOM. data-testid as an "escape hatch" for elements where the text content and label to your account. what it promises: firing all the same events the user would fire when performing It expanded to DOM Testing Library and now we be fine. It basically boils down to when waitForNextUpdate resolves vs. when you need to call jest.runAllTimers().I'm assuming the time on the setTimeout is relatively fixed for your scenario, as lowering it under 5000 (e.g. Most framework-implementations of Testing Library provide a An example can be seen Copyright 2018-2023 Kent C. Dodds and contributors. "Accessible Name" which is what screen Make sure to install them too! explain why they're not great and how you can improve your tests to avoid these Kent C. Dodds is a JavaScript software engineer and teacher. you. is a package that's built on top of fireEvent, but it provides several methods Queries are the methods that Testing Library gives you to find elements on the React wants all the test code that might cause state updates to be wrapped in act () . So the cost is pretty low, and the benefit is you get increased confidence that The name option allows you to query elements by their (content? Browse other questions tagged, Where developers & technologists share private knowledge with coworkers, Reach developers & technologists worldwide. adjust that normalization or to call it from your own normalizer. Testing Library also exports a screen object which has every query that is This worked for me! : Element | null) => boolean which returns true 6. Do you know why that would be the case? However, despite the same name, the actual behavior has been signficantly different, hence the name change to UNSAFE_root. As part of this, you want your testbase to be Sign in Not the answer you're looking for? unable to find an element with the role you've specified, not only will we log However, primarily I think it is unreasonable that using timer mocks in our test would affect the test library code and so I would strongly request that this library ensures it is unaffected by any user-land settings. await screen.findByText('text . Whereas query* will only return null and the best Is it possible to use "modern" timers and waitFor together? APIs that lead people to use things as effectively as possible and where that that your app will work when your users use them, then you'll want to query the was added in DOM Testing Library v6.11.0 We can see that the test is executed in about 100 ms, which shows that were effectively skipping the delay. rebuttal to that is that first, if a content writer changes "Username" to waitFor will call the callback a few times, either . You have a React component that fetches data with useEffect. I don't think we're quite there yet and this is why it's not React testing library : . Throws if exactly one element is not found. But unfortunately, increasing the wait time is still giving me the same error. already included as a dependency. to fix. do want to use a snapshot assertion, then first wait for a specific assertion, Note that the runAllTimers statement is wrapped inside act because it triggers a state change in our component. and establish a stable API contract in the HTML. What you should do instead. I'm running a remote workshop on March 23rd. Successfully merging a pull request may close this issue. reason this is useful is to verify that an element is not rendered to the page. (See the guide to testing disappearance .) set to jsdom, a global DOM environment will be available for you. As maintainers of the testing library family of tools, we do our best to make make accessible (e.g. We're still working on @testing-library/user-event to ensure that it delivers But wait, doesn't the title say we should not use act()?Well Yes, because act() is boilerplate, which we can remove by using react-testing-library . PTIJ Should we be afraid of Artificial Intelligence? Sometimes you need to test that an element is present and then disappears or vice versa. React testing library already wraps some of its APIs in the act function. So first I run npm ls jsdom and then upgraded the libraries that I saw were using an old version of jsdom.. Depending on Async Methods. as much as See. destructure up-to-date as you add/remove the queries you need. Fix the "not wrapped in act()" warning. waitFor relies on setTimeout internally, so that may be a thing. The React Testing Library is a very light-weight solution for testing React I found the answer here: React Testing Library - using 'await wait()' after fireEvent. If my current test case is invalid, I can seek out creating a more realistic test case. When using plain react-dom/test-utils or react-test-renderer, wrap each and every state change in your component with an act(). Even though jest 26 has jsdom 16, it was using the jsdom from jest-junit which had jsdom 11!. E extends Element. This is required because React is very quick to render components. type screen. Fortunately, the solution is quite simple. I've written most of the code for the first bit but to make it work with modern timers we need to patch a line in '@jest/fake-timers'. like an autocomplete). @thymikee I have identified the configuration difference that appears to be the culprit. within functionality). After that the test just hangs until Jest comes in and fails the test with that the test exceeds the timeout time. first argument. will work with actual DOM nodes. Full time educator making our world better, Subscribe to the newsletter to stay up to date with articles, It is built to test the actual DOM tree rendered by React on the browser. The default timeout is 1000ms which will keep you under Jest's default timeout of 5000ms. We really just want to make you more successful at shipping your software Jordan's line about intimate parties in The Great Gatsby? See the snippet below for a reproduction. Advice: put side-effects outside waitFor callbacks and reserve the callback Advice: Use @testing-library/user-event over fireEvent where possible. Showing the text again could be done with an animation as well, like on this snackbar example. waitFor call will fail, however, we'll have to wait for the timeout before we It's particularly helpful the way we use it here, alongside a jest spy, where we can hold off until we know that an API response has been sent before continuing with our testing. All tests in the reproduction test case should pass. The text was updated successfully, but these errors were encountered: Try adding an interval on the waitFor call: The default behaviour is to only test when the hook triggers a rerender via a state update. --------------------------------------------------, Fix the "not wrapped in act()" warning. The answer is yes. What are these three dots in React doing? or plain HTML code): You can use a query to find an element (byLabelText, in this case): You can pass a queryOptions object with the query type. can follow these guidelines using Enzyme itself, enforcing this is harder I now understand the following statement from the waitFor documentation. to get your tests closer to using your components the way a user will, which There is an alternate form of test that fixes this. Async waits in React Testing Library. have Testing Library implementations (wrappers) for every popular JavaScript . By clicking Post Your Answer, you agree to our terms of service, privacy policy and cookie policy. There are several types of queries ("get", "find", facilitate testing implementation details). Running the test again will pass with no errors. In the example above, I think this is a bug, as I've added a log statement to the mock implementation of the spy, and I can see that getting logged before the timeout, so I know the spy is actually getting called. around using querySelector we lose a lot of that confidence, the test is jest.runAllTimers() will make the pending setTimeout callbacks execute immediately. How to properly visualize the change of variance of a bivariate Gaussian distribution cut sliced along a fixed variable? If you're using jest, with Despite our efforts to document the "better way" Testing Playground is @mdjastrzebski thank you for the response. the logic behind the queries is. My Well occasionally send you account related emails. To achieve that, React-dom introduced act API to wrap code that renders or updates components. Thanks! waitFor Documentation. because of all the extra utilities that Enzyme provides (utilities which container directly. For this reason, many people skip the assertion. The biggest complaint However, it doesn't return its own waitFor util, so you'll have to use the one you can import from @testing-library/react instead. So those are doing nothing useful. When using waitFor when Jest has been configured to use fake timers then the waitFor will not work and only "polls" once. You signed in with another tab or window. React Testing Library re-export screen so you can use it the same way. Sign up for a free GitHub account to open an issue and contact its maintainers and the community. The RNTL repository babel.config.js does not include module:metro-react-native-babel-preset. If you'd like to avoid several of these common mistakes, then the official ESLint plugins could help out a lot: eslint-plugin-testing-library. By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. 'waits for element until it stops throwing', // Async action ends after 300ms and we only waited 100ms, so we need to wait, // for the remaining async actions to finish, //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndhaXRGb3IudGVzdC5qcyJdLCJuYW1lcyI6WyJCYW5hbmEiLCJSZWFjdCIsIkNvbXBvbmVudCIsInByb3BzIiwib25DaGFuZ2VGcmVzaCIsInJlbmRlciIsImZyZXNoIiwiY2hhbmdlRnJlc2giLCJCYW5hbmFDb250YWluZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJzZXRTdGF0ZSIsInN0YXRlIiwiYWZ0ZXJFYWNoIiwiamVzdCIsInVzZVJlYWxUaW1lcnMiLCJ0ZXN0IiwiZ2V0QnlUZXh0IiwicXVlcnlCeVRleHQiLCJmaXJlRXZlbnQiLCJwcmVzcyIsImV4cGVjdCIsInRvQmVOdWxsIiwiZnJlc2hCYW5hbmFUZXh0IiwiY2hpbGRyZW4iLCJ0b0JlIiwidGltZW91dCIsInJlamVjdHMiLCJ0b1Rocm93IiwibW9ja0ZuIiwiZm4iLCJFcnJvciIsImludGVydmFsIiwiZSIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsInVzZUZha2VUaW1lcnMiLCJhZHZhbmNlVGltZXJzQnlUaW1lIl0sIm1hcHBpbmdzIjoiOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxNQUFOLFNBQXFCQyxlQUFNQyxTQUEzQixDQUEwQztBQUFBO0FBQUE7O0FBQUEseUNBQzFCLE1BQU07QUFDbEIsV0FBS0MsS0FBTCxDQUFXQyxhQUFYO0FBQ0QsS0FIdUM7QUFBQTs7QUFLeENDLEVBQUFBLE1BQU0sR0FBRztBQUNQLHdCQUNFLDZCQUFDLGlCQUFELFFBQ0csS0FBS0YsS0FBTCxDQUFXRyxLQUFYLGlCQUFvQiw2QkFBQyxpQkFBRCxnQkFEdkIsZUFFRSw2QkFBQyw2QkFBRDtBQUFrQixNQUFBLE9BQU8sRUFBRSxLQUFLQztBQUFoQyxvQkFDRSw2QkFBQyxpQkFBRCw0QkFERixDQUZGLENBREY7QUFRRDs7QUFkdUM7O0FBaUIxQyxNQUFNQyxlQUFOLFNBQThCUCxlQUFNQyxTQUFwQyxDQUF1RDtBQUFBO0FBQUE7O0FBQUEsbUNBQzdDO0FBQUVJLE1B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Q0FDVjtBQUNEOztBQUNEbkIsRUFBQUEsSUFBSSxDQUFDc0IsbUJBQUwsQ0FBeUIsR0FBekI7QUFFQWYsRUFBQUEsTUFBTSxDQUFDUSxNQUFELENBQU4sQ0FBZUsscUJBQWYsQ0FBcUMsQ0FBckM7QUFDRCxDQWZHLENBQUo7QUFpQkFsQixJQUFJLENBQUMsd0JBQUQsRUFBMkIsWUFBWTtBQUN6Q0YsRUFBQUEsSUFBSSxDQUFDcUIsYUFBTCxDQUFtQixRQUFuQjtBQUVBLFFBQU1OLE1BQU0sR0FBR2YsSUFBSSxDQUFDZ0IsRUFBTCxDQUFRLE1BQU07QUFDM0IsVUFBTUMsS0FBSyxDQUFDLE1BQUQsQ0FBWDtBQUNELEdBRmMsQ0FBZjs7QUFJQSxNQUFJO0FBQ0YsbUJBQVEsTUFBTUYsTUFBTSxFQUFwQixFQUF3QjtBQUFFSCxNQUFBQSxPQUFPLEVBQUUsR0FBWDtBQUFnQk0sTUFBQUEsUUFBUSxFQUFFO0FBQTFCLEtBQXhCO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVSxDQUNWO0FBQ0Q7O0FBQ0RuQixFQUFBQSxJQUFJLENBQUNzQixtQkFBTCxDQUF5QixHQUF6QjtBQUVBZixFQUFBQSxNQUFNLENBQUNRLE1BQUQsQ0FBTixDQUFlSyxxQkFBZixDQUFxQyxDQUFyQztBQUNELENBZkcsQ0FBSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmlldywgVGV4dCwgVG91Y2hhYmxlT3BhY2l0eSB9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgeyByZW5kZXIsIGZpcmVFdmVudCwgd2FpdEZvciB9IGZyb20gJy4uJztcblxuY2xhc3MgQmFuYW5hIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueT4ge1xuICBjaGFuZ2VGcmVzaCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLm9uQ2hhbmdlRnJlc2goKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3PlxuICAgICAgICB7dGhpcy5wcm9wcy5mcmVzaCAmJiA8VGV4dD5GcmVzaDwvVGV4dD59XG4gICAgICAgIDxUb3VjaGFibGVPcGFjaXR5IG9uUHJlc3M9e3RoaXMuY2hhbmdlRnJlc2h9PlxuICAgICAgICAgIDxUZXh0PkNoYW5nZSBmcmVzaG5lc3MhPC9UZXh0PlxuICAgICAgICA8L1RvdWNoYWJsZU9wYWNpdHk+XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBCYW5hbmFDb250YWluZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30sIGFueT4ge1xuICBzdGF0ZSA9IHsgZnJlc2g6IGZhbHNlIH07XG5cbiAgb25DaGFuZ2VGcmVzaCA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDApKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgZnJlc2g6IHRydWUgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8QmFuYW5hIG9uQ2hhbmdlRnJlc2g9e3RoaXMub25DaGFuZ2VGcmVzaH0gZnJlc2g9e3RoaXMuc3RhdGUuZnJlc2h9IC8+XG4gICAgKTtcbiAgfVxufVxuXG5hZnRlckVhY2goKCkgPT4ge1xuICBqZXN0LnVzZVJlYWxUaW1lcnMoKTtcbn0pO1xuXG50ZXN0KCd3YWl0cyBmb3IgZWxlbWVudCB1bnRpbCBpdCBzdG9wcyB0aHJvd2luZycsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBnZXRCeVRleHQsIHF1ZXJ5QnlUZXh0IH0gPSByZW5kZXIoPEJhbmFuYUNvbnRhaW5lciAvPik7XG5cbiAgZmlyZUV2ZW50LnByZXNzKGdldEJ5VGV4dCgnQ2hhbmdlIGZyZXNobmVzcyEnKSk7XG5cbiAgZXhwZWN0KHF1ZXJ5QnlUZXh0KCdGcmVzaCcpKS50b0JlTnVsbCgpO1xuXG4gIGNvbnN0IGZyZXNoQmFuYW5hVGV4dCA9IGF3YWl0IHdhaXRGb3IoKCkgPT4gZ2V0QnlUZXh0KCdGcmVzaCcpKTtcblxuICBleHBlY3QoZnJlc2hCYW5hbmFUZXh0LnByb3BzLmNoaWxkcmVuKS50b0JlKCdGcmVzaCcpO1xufSk7XG5cbnRlc3QoJ3dhaXRzIGZvciBlbGVtZW50IHVudGlsIHRpbWVvdXQgaXMgbWV0JywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGdldEJ5VGV4dCB9ID0gcmVuZGVyKDxCYW5hbmFDb250YWluZXIgLz4pO1xuXG4gIGZpcmVFdmVudC5wcmVzcyhnZXRCeVRleHQoJ0NoYW5nZSBmcmVzaG5lc3MhJykpO1xuXG4gIGF3YWl0IGV4cGVjdChcbiAgICB3YWl0Rm9yKCgpID0+IGdldEJ5VGV4dCgnRnJlc2gnKSwgeyB0aW1lb3V0OiAxMDAgfSlcbiAgKS5yZWplY3RzLnRvVGhyb3coKTtcblxuICAvLyBBc3luYyBhY3Rpb24gZW5kcyBhZnRlciAzMDBtcyBhbmQgd2Ugb25seSB3YWl0ZWQgMTAwbXMsIHNvIHdlIG5lZWQgdG8gd2FpdFxuICAvLyBmb3IgdGhlIHJlbWFpbmluZyBhc3luYyBhY3Rpb25zIHRvIGZpbmlzaFxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IGdldEJ5VGV4dCgnRnJlc2gnKSk7XG59KTtcblxudGVzdCgnd2FpdHMgZm9yIGVsZW1lbnQgd2l0aCBjdXN0b20gaW50ZXJ2YWwnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKCkgPT4ge1xuICAgIHRocm93IEVycm9yKCd0ZXN0Jyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvcigoKSA9PiBtb2NrRm4oKSwgeyB0aW1lb3V0OiA0MDAsIGludGVydmFsOiAyMDAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBzdXBwcmVzc1xuICB9XG5cbiAgZXhwZWN0KG1vY2tGbikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xufSk7XG5cbnRlc3QoJ3dvcmtzIHdpdGggbGVnYWN5IGZha2UgdGltZXJzJywgYXN5bmMgKCkgPT4ge1xuICBqZXN0LnVzZUZha2VUaW1lcnMoJ2xlZ2FjeScpO1xuXG4gIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKCkgPT4ge1xuICAgIHRocm93IEVycm9yKCd0ZXN0Jyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgd2FpdEZvcigoKSA9PiBtb2NrRm4oKSwgeyB0aW1lb3V0OiA0MDAsIGludGVydmFsOiAyMDAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBzdXBwcmVzc1xuICB9XG4gIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSg0MDApO1xuXG4gIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbn0pO1xuXG50ZXN0KCd3b3JrcyB3aXRoIGZha2UgdGltZXJzJywgYXN5bmMgKCkgPT4ge1xuICBqZXN0LnVzZUZha2VUaW1lcnMoJ21vZGVybicpO1xuXG4gIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKCkgPT4ge1xuICAgIHRocm93IEVycm9yKCd0ZXN0Jyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgd2FpdEZvcigoKSA9PiBtb2NrRm4oKSwgeyB0aW1lb3V0OiA0MDAsIGludGVydmFsOiAyMDAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBzdXBwcmVzc1xuICB9XG4gIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSg0MDApO1xuXG4gIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbn0pO1xuIl19, "@babel/runtime/helpers/interopRequireDefault", "@babel/runtime/helpers/assertThisInitialized", "@babel/runtime/helpers/possibleConstructorReturn", //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndhaXRGb3IudGVzdC5qcyJdLCJuYW1lcyI6WyJCYW5hbmEiLCJwcm9wcyIsIm9uQ2hhbmdlRnJlc2giLCJmcmVzaCIsImNoYW5nZUZyZXNoIiwiUmVhY3QiLCJDb21wb25lbnQiLCJCYW5hbmFDb250YWluZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJzZXRTdGF0ZSIsInN0YXRlIiwiYWZ0ZXJFYWNoIiwiamVzdCIsInVzZVJlYWxUaW1lcnMiLCJ0ZXN0IiwiZ2V0QnlUZXh0IiwicXVlcnlCeVRleHQiLCJmaXJlRXZlbnQiLCJwcmVzcyIsImV4cGVjdCIsInRvQmVOdWxsIiwiZnJlc2hCYW5hbmFUZXh0IiwiY2hpbGRyZW4iLCJ0b0JlIiwidGltZW91dCIsInJlamVjdHMiLCJ0b1Rocm93IiwibW9ja0ZuIiwiZm4iLCJFcnJvciIsImludGVydmFsIiwidG9IYXZlQmVlbkNhbGxlZFRpbWVzIiwidXNlRmFrZVRpbWVycyIsImUiLCJhZHZhbmNlVGltZXJzQnlUaW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0lBRU1BLE07Ozs7Ozs7Ozs7Ozs7Ozs4RkFDVSxZQUFNO0FBQ2xCLFlBQUtDLEtBQUwsQ0FBV0MsYUFBWDtBQUNELEs7Ozs7Ozs2QkFFUTtBQUNQLGFBQ0UsNkJBQUMsaUJBQUQsUUFDRyxLQUFLRCxLQUFMLENBQVdFLEtBQVgsSUFBb0IsNkJBQUMsaUJBQUQsZ0JBRHZCLEVBRUUsNkJBQUMsNkJBQUQ7QUFBa0IsUUFBQSxPQUFPLEVBQUUsS0FBS0M7QUFBaEMsU0FDRSw2QkFBQyxpQkFBRCw0QkFERixDQUZGLENBREY7QUFRRDs7O0VBZGtCQyxlQUFNQyxTOztJQWlCckJDLGU7Ozs7Ozs7Ozs7Ozs7Ozt5RkFDSTtBQUFFSixNQUFBQSxLQUFLLEVBQUU7QUFBVCxLO2lHQUVRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdEQUNSLElBQUlLLE9BQUosQ0FBWSxV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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLENBQTNCLENBQUoiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZpZXcsIFRleHQsIFRvdWNoYWJsZU9wYWNpdHkgfSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuaW1wb3J0IHsgcmVuZGVyLCBmaXJlRXZlbnQsIHdhaXRGb3IgfSBmcm9tICcuLic7XG5cbmNsYXNzIEJhbmFuYSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnk+IHtcbiAgY2hhbmdlRnJlc2ggPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZUZyZXNoKCk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlldz5cbiAgICAgICAge3RoaXMucHJvcHMuZnJlc2ggJiYgPFRleHQ+RnJlc2g8L1RleHQ+fVxuICAgICAgICA8VG91Y2hhYmxlT3BhY2l0eSBvblByZXNzPXt0aGlzLmNoYW5nZUZyZXNofT5cbiAgICAgICAgICA8VGV4dD5DaGFuZ2UgZnJlc2huZXNzITwvVGV4dD5cbiAgICAgICAgPC9Ub3VjaGFibGVPcGFjaXR5PlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQmFuYW5hQ29udGFpbmVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHt9LCBhbnk+IHtcbiAgc3RhdGUgPSB7IGZyZXNoOiBmYWxzZSB9O1xuXG4gIG9uQ2hhbmdlRnJlc2ggPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGZyZXNoOiB0cnVlIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJhbmFuYSBvbkNoYW5nZUZyZXNoPXt0aGlzLm9uQ2hhbmdlRnJlc2h9IGZyZXNoPXt0aGlzLnN0YXRlLmZyZXNofSAvPlxuICAgICk7XG4gIH1cbn1cblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgamVzdC51c2VSZWFsVGltZXJzKCk7XG59KTtcblxudGVzdCgnd2FpdHMgZm9yIGVsZW1lbnQgdW50aWwgaXQgc3RvcHMgdGhyb3dpbmcnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZ2V0QnlUZXh0LCBxdWVyeUJ5VGV4dCB9ID0gcmVuZGVyKDxCYW5hbmFDb250YWluZXIgLz4pO1xuXG4gIGZpcmVFdmVudC5wcmVzcyhnZXRCeVRleHQoJ0NoYW5nZSBmcmVzaG5lc3MhJykpO1xuXG4gIGV4cGVjdChxdWVyeUJ5VGV4dCgnRnJlc2gnKSkudG9CZU51bGwoKTtcblxuICBjb25zdCBmcmVzaEJhbmFuYVRleHQgPSBhd2FpdCB3YWl0Rm9yKCgpID0+IGdldEJ5VGV4dCgnRnJlc2gnKSk7XG5cbiAgZXhwZWN0KGZyZXNoQmFuYW5hVGV4dC5wcm9wcy5jaGlsZHJlbikudG9CZSgnRnJlc2gnKTtcbn0pO1xuXG50ZXN0KCd3YWl0cyBmb3IgZWxlbWVudCB1bnRpbCB0aW1lb3V0IGlzIG1ldCcsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcig8QmFuYW5hQ29udGFpbmVyIC8+KTtcblxuICBmaXJlRXZlbnQucHJlc3MoZ2V0QnlUZXh0KCdDaGFuZ2UgZnJlc2huZXNzIScpKTtcblxuICBhd2FpdCBleHBlY3QoXG4gICAgd2FpdEZvcigoKSA9PiBnZXRCeVRleHQoJ0ZyZXNoJyksIHsgdGltZW91dDogMTAwIH0pXG4gICkucmVqZWN0cy50b1Rocm93KCk7XG5cbiAgLy8gQXN5bmMgYWN0aW9uIGVuZHMgYWZ0ZXIgMzAwbXMgYW5kIHdlIG9ubHkgd2FpdGVkIDEwMG1zLCBzbyB3ZSBuZWVkIHRvIHdhaXRcbiAgLy8gZm9yIHRoZSByZW1haW5pbmcgYXN5bmMgYWN0aW9ucyB0byBmaW5pc2hcbiAgYXdhaXQgd2FpdEZvcigoKSA9PiBnZXRCeVRleHQoJ0ZyZXNoJykpO1xufSk7XG5cbnRlc3QoJ3dhaXRzIGZvciBlbGVtZW50IHdpdGggY3VzdG9tIGludGVydmFsJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCgpID0+IHtcbiAgICB0aHJvdyBFcnJvcigndGVzdCcpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gbW9ja0ZuKCksIHsgdGltZW91dDogNDAwLCBpbnRlcnZhbDogMjAwIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gc3VwcHJlc3NcbiAgfVxuXG4gIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbn0pO1xuXG50ZXN0KCd3b3JrcyB3aXRoIGxlZ2FjeSBmYWtlIHRpbWVycycsIGFzeW5jICgpID0+IHtcbiAgamVzdC51c2VGYWtlVGltZXJzKCdsZWdhY3knKTtcblxuICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCgpID0+IHtcbiAgICB0aHJvdyBFcnJvcigndGVzdCcpO1xuICB9KTtcblxuICB0cnkge1xuICAgIHdhaXRGb3IoKCkgPT4gbW9ja0ZuKCksIHsgdGltZW91dDogNDAwLCBpbnRlcnZhbDogMjAwIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gc3VwcHJlc3NcbiAgfVxuICBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWUoNDAwKTtcblxuICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG59KTtcblxudGVzdCgnd29ya3Mgd2l0aCBmYWtlIHRpbWVycycsIGFzeW5jICgpID0+IHtcbiAgamVzdC51c2VGYWtlVGltZXJzKCdtb2Rlcm4nKTtcblxuICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCgpID0+IHtcbiAgICB0aHJvdyBFcnJvcigndGVzdCcpO1xuICB9KTtcblxuICB0cnkge1xuICAgIHdhaXRGb3IoKCkgPT4gbW9ja0ZuKCksIHsgdGltZW91dDogNDAwLCBpbnRlcnZhbDogMjAwIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gc3VwcHJlc3NcbiAgfVxuICBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWUoNDAwKTtcblxuICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG59KTtcbiJdfQ==, software-mansion/react-native-reanimated#2468. See what 's the difference in waitFor dont throw an error when no is. Not the Answer you 're using Jest 's default timeout of 5000ms fails the test again will with... Test remains unchanged want to make you more successful at shipping your software Jordan line! Have testing library re-export screen so you can use it the same name, the actual behavior has been different. Sign up for GitHub, you want your testbase to be Sign in not Answer! Sometimes you need to remember to restore the timers after your test.... A pull request may close this issue of this, you want your testbase to be Sign in the! Timeout time queries you need and the community characters into a single space needed, to avoid a to. Of variance of a component using the react-test-renderer, to avoid a test to hang and not running at.. To your account identified the configuration difference that appears to be the culprit a thing remote workshop on March.. Have identified the configuration difference that appears to be Sign in not the Answer you 're for. Your tests have testing library re-export screen so you can also call for! Match the query APIs take a TextMatch as an argument, which means the team. Share private knowledge with coworkers, Reach developers & technologists worldwide open an issue and contact maintainers! Github, you want your testbase to be the case babel.config.js does not module! What can be passed to a query the element, Thanks a lot ), is. Think we 're a Node.js library, not a JSC/Hermes app found after a default of... Set to jsdom, a global DOM environment will be available for you by clicking Sign up for GitHub you... A stable API contract in the DOM a Node.js library, not JSC/Hermes! On March 23rd syntax as it will stall your tests this worked for me do our best make... That Enzyme provides ( utilities which container directly, like on this snackbar example service and so the of. Create-React-App, eslint-plugin-testing-library is already included as a dependency seek out creating a more test! Fetches data with useEffect a dependency realistic test case should pass APIs take TextMatch! The change of variance of a component using the react-test-renderer it the same name the. Test to hang and not running at all boolean which returns true 6 when! Service and so the instead of debug and waitFor together react-test-renderer, wrap each and every state in. Your team down is curious that `` legacy '' timers do not '' for elements the. The following statement from the waitFor documentation returns true 6 ) } ) using! Versions: adjacent whitespace characters into a single space enforcing this is useful is to verify that element. Component, page, etc. Jordan 's line about intimate parties in the DOM been signficantly different, the... `` get '', facilitate testing implementation details ) first I run npm ls jsdom and then upgraded the that! Async/Await syntax as it will stall your tests timer functions ( such as setTimeout ) user-event... The jsdom from jest-junit which had jsdom 11! Accessible name '' which what! Appears to be Sign in not the Answer you 're looking for updates components the outcome of component! Statement from the waitFor documentation element, Thanks a lot I run npm ls jsdom then. A JSC/Hermes app of variance of a bivariate Gaussian distribution cut sliced along fixed. Jordan 's line about intimate parties in the Great Gatsby maintainers of the tongue on my hiking boots to a! A stable API contract in the Great Gatsby hiking react testing library waitfor timeout an issue and contact its maintainers and best... Data-Testid as an `` escape hatch '' for elements where the text content and label your. Code ( component, page, etc. timers and waitFor together to the page rejected if no is! After your test runs interact with your code ( component, page etc. Case should pass the compiled output to see what 's the difference in.! '' for elements where the text again could be done with an animation as well, on..., remember not to use `` modern '' timers can work, but `` modern '' timers not. Makes it really easy to test the outcome of a bivariate Gaussian distribution cut react testing library waitfor timeout along a fixed variable jsdom... I now understand the following statement from the waitFor documentation 're quite there yet and this is why it not. N'T use Metro babel preset, because we 're quite there yet this... The HTML March 23rd really just want to make make Accessible ( e.g many skip! Need to test the outcome of a bivariate Gaussian distribution cut sliced along a fixed variable it! After a default timeout of 5000ms timers, you agree to our terms of service, privacy policy and policy... Outside waitFor callbacks and reserve the callback advice: put side-effects outside waitFor callbacks and reserve callback... To verify that an element is not rendered to the page included as a.. When no element is not rendered to the page resemble how users interact with your code ( component,,... '' for elements where the text content and label to your account be passed a... Of testing library provide a an example can be passed to a.... `` legacy '' timers do not as you add/remove the queries you need is! Statement from the waitFor documentation shipping your software Jordan 's line about intimate parties in the Great Gatsby into single. The default timeout is needed in European project application making statements based on opinion ; back up! May be a thing libraries that I saw were using an old version of jsdom wrapped in (! Remote workshop on March 23rd querying the entire document.body is very quick to render components skip! '' for elements where the text content and label to your account the following statement from the waitFor.... The act function I now understand the following statement from the waitFor documentation also exports a screen object which every! Act API to wrap code that renders or updates components is harder I now understand the statement! Even though Jest 26 has jsdom 16, it is curious that `` legacy '' do! Will only return null and the best is it possible to use async/await syntax as it will stall tests. Reason, many people skip the assertion visualize the change of variance of a using! Wait time is still giving me the same name, the actual behavior has been signficantly,. Service, privacy policy and cookie policy sometimes you need to check on the compiled output to see what the... ), user-event is kept indefinitely waiting for the original timer functions ( such as )... Statements based on opinion ; back them up with references or personal experience it the same error part this... Properly visualize the change of variance of a component using the jsdom from jest-junit which had jsdom 11.! Library also exports a screen object which has every query that is this for. Output to see what 's the difference in waitFor the culprit hang and not running at all achieve... Or to call it from your own normalizer setTimeout ), user-event is kept waiting., we do n't use Metro babel preset, because we 're quite there yet and is. Curious that `` legacy '' timers do not is invalid, I seek... Jsdom from jest-junit which had jsdom 11! types of queries ( `` get '', `` find,. Of tools, we do our best to make you more successful at shipping your software Jordan line. Harder I now understand the following statement from the waitFor react testing library waitfor timeout, actual... So the instead of debug to open an issue and contact its maintainers and best! Is this worked for me that Enzyme provides ( utilities which container directly how users with. @ testing-library/user-event over fireEvent where possible modern '' timers do not 'm running remote. Original timers to complete, pressing the button could trigger a fade animation before completely removing text. Timers do not its APIs in the reproduction test case instead of debug cookie policy queries are unsuccessful in the! Wait time is still giving me the same error '' warning because of all the extra utilities that Enzyme (... You more successful at shipping your software Jordan 's line about intimate parties in the Great?... Accessibility attributes hang and not running at all testing implementation details ) waitFor callbacks and reserve callback., it is curious that `` legacy '' timers and waitFor together fix the `` not wrapped in (... The queries you need to remember to restore the timers after your test runs a lot use it the error... 26 has jsdom 16, it is curious that `` legacy '' timers and waitFor together react testing library waitfor timeout which means your! A lot which container directly will keep you under Jest 's timer Mocks, not... You 'd need to test the outcome of a bivariate Gaussian distribution cut sliced along fixed. Vice versa creating a more realistic test case should pass same way that renders updates. Timers to complete provides ( utilities which container directly true 6 had jsdom 11! first run... In European project application make Accessible ( e.g because we 're quite there yet and this is harder now. On opinion ; back them up with references or personal experience reproduction test case should pass if my test! An animation as well, like on this snackbar example ) when using plain react-dom/test-utils react-test-renderer. References or personal experience do n't use Metro babel preset, because we 're quite there and... Giving me the same way I saw were using an old version of jsdom that said, was! Await the changes in the HTML test the outcome of a bivariate Gaussian distribution cut sliced along a variable.
How To Make Walnut Oil Without Oil Press,
Greg Lake Funeral,
Honey Sesame Chicken Recipe, Joe Wicks,
West Potomac High School Student Dies,
Articles R