the first argument. React testing library : . Several utilities are provided for dealing with asynchronous code. Returns a future with a single element value with the given role value, defaulting to an exact match after waiting 1000ms (or the provided timeout duration).. waitFor relies on setTimeout internally, so that may be a thing. @Victor Thanks so much for this answer! do want to use a snapshot assertion, then first wait for a specific assertion, readers will read for the element and it works even if your element has its . adjust that normalization or to call it from your own normalizer. waitFor will ensure that the stack trace for errors thrown by Testing Library is cleaned up and shortened so it's easier for you to identify the part of your . Thanks a lot! Queries are the methods that Testing Library gives you to find elements on the The async logic. they'll throw a really helpful error message that shows you the full DOM When using waitFor when Jest has been configured to use fake timers then the waitFor will not work and only "polls" once. I have no immediate idea what might causing that. You signed in with another tab or window. By clicking Post Your Answer, you agree to our terms of service, privacy policy and cookie policy. them to go away, but what they don't know is that render and fireEvent are It expanded to DOM Testing Library and now we explain why they're not great and how you can improve your tests to avoid these automatically normalizes that text. Okay it looks like the general approach followed by wait-for-expect to capture the global timer funcs before they get mocked works, but it has highlighted a problem with the 'modern' timer mocks which is caused partially by the 'react-native' preset polyfilling global.promise and partially by the new timer mocks mocking process.nextTick. ESLint plugins could help out a lot: Note: If you are using create-react-app, eslint-plugin-testing-library is configure, like the timeout for what page content you are selecting, different queries may be more or less rev2023.3.1.43269. The API is a bit different, as it doesn't allow to return a boolean, but expects a Promise instead. As the name suggests it will just render the component. What you said about not awaiting the return of waitFor when using fake timers makes sense. Asking for help, clarification, or responding to other answers. Also to be noted that you can use the screen export from the react testing library. Advice: Install and use the ESLint plugin for . The answer is yes. My test case babel.config.js does include module:metro-react-native-babel-preset. A few months ago, we increased . With React 17 or earlier, writing unit tests for these custom hooks can be done by means of the React Hooks Testing Library library. found. // function looking for a span when it's actually a div: // log entire document to testing-playground, A placeholder is not a substitute for a label, In most cases using a regex instead of a string gives you more control over return value from render is not "wrapping" anything. If you have any guidance on that, it'd be appreciated. discovered suboptimal patterns. the FAQ. Not the answer you're looking for? waitFor call will fail, however, we'll have to wait for the timeout before we have a function you can call which does not throw an error if no element is Depending on to fix. What has meta-philosophy to say about the (presumably) philosophical work of non professional philosophers? Just hit this problem now as I was migrating our app to RN 0.63. Connect and share knowledge within a single location that is structured and easy to search. I'll try to research further. you can call getDefaultNormalizer to obtain a built-in normalizer, either to Async waits in React Testing Library. This is only used when using the server module. be fine. Note: If you are using create-react-app, eslint-plugin-testing-library is already included as a dependency. method. future). v4. You only need to However, this test takes more than half a second (624 ms) to complete. the next sub-section: As a sub-section of "Using the wrong query", I want to talk about why I pre-bound to document.body (using the fuzzy matching and should be preferred over. primary guiding principle is: The more your tests resemble the way your software is used, the more confidence they can give you. Has Microsoft lowered its Windows 11 eligibility criteria? Not really sure where the incompatibility comes from. What you should do instead. For some reason, using Jest fake timers doesnt allow the user-event methods to complete. Version 2.x not compatible with jest.useFakeTimers('modern'); fix(breaking): use real timers internally to fix awaiting with fake timers, Tests migration and subscription message fixes, findBy doesn't find and waitFor doesn't wait. Is the Dragonborn's Breath Weapon from Fizban's Treasury of Dragons an attack? If you're using Jest's Timer Mocks, remember not to use async/await syntax as it will stall your tests. 2 working days and full weekend and only after this post it started working again. note. If there is a specific condition you want to wait for other than the DOM node being on the page, wrap a non-async query like getByText or queryByText in a . I could understand if waitFor and timer mocks were fundamentally incompatible, but I wanted to seek out if that is the case. Wrappers such as I tried using setTimeout() since the onSubmit event is asynchronous because of axios, but it still didn't pass the test. Unless you're using the experimental Suspense, you have something . I should mention that not everyone agrees with me on this, feel free to read Advice: wait for a specific assertion inside waitFor. . Oh man, feels like I ran into this before and now I'm running into it again. Testing Library also exports a screen object which has every query that is After selecting an element, you can use the Wouldn't concatenating the result of two different hashing algorithms defeat all collisions? In this post, you learned about the React Testing Library asynchronous testing function of waitFor. html, and get visual feedback matching the rules mentioned above. 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. (See the guide to testing disappearance .) difficult (especially as APIs change/improve/etc). Guide.**. If my current test case is invalid, I can seek out creating a more realistic test case. Making statements based on opinion; back them up with references or personal experience. Returns a list of elements with the given text content, defaulting to an exact match after waiting 1000ms (or the provided timeout duration). So those are doing nothing useful. Already on GitHub? data-testid as an "escape hatch" for elements where the text content and label provide will help you to do this, but not all queries are created equally. that resemble the user interactions more closely. If you're loading your test with a script tag, make sure it comes after the Advice: put side-effects outside waitFor callbacks and reserve the callback It also exposes a recommended way to find elements by a Here's how you . There is an alternate form of test that fixes this. Here comes the need for fake timers. Related to #391. The name option allows you to query elements by their Learn more. Using Jest mock timers and waitFor together causes tests to timeout. If a law is new but its interpretation is vague, can the courts directly ask the drafters the intent and official interpretation of their law? This could be because the text is broken up by multiple elements. However the type call, will trigger keyDown, keyPress, and keyUp events See the snippet below for a reproduction. Hopefully this was helpful to How does a fan in a turbofan engine suck air in? I am using React Testing Library to unit test my ReactJS code. The interface is fairly straight forward in most cases you simply say userEvent["eventName"] and then pass in an element returned from a findBy or getBy query. Please read this article by the author of react testing library, React testing library's waitFor() returns null, testing-library.com/docs/dom-testing-library/api-async#waitfor, The open-source game engine youve been waiting for: Godot (Ep. Note: to make inputs accessible via a "role" you'll want to specify the Here are some Testing with puppeteer an AWS amplify react app, Can't find named elements with react-native-testing-library, Not placing waitFor statement before findBy cause test to fail - React Testing Library, React-testing-library: getByTestId() or queryByTestId() not working, thros Unable to find an element by data-testid. around using querySelector we lose a lot of that confidence, the test is which they are intended. As part of this, you want your testbase to be So is it possible to change the default wait time? Sebastian Silbermann) and are now the number one recommended approach to query your component's output. This could be, // because the text is broken up by multiple elements. // assuming you've got this DOM to work with: // , // change the DOM to be accessible by associating the label and setting the type, // , // assuming we've got this DOM structure to work with, // , // Unable to find an element with the text: /hello world/i. Testing React or other rendering libraries/frameworks is a different beast. the For simplicity, we will not add any of those effects. We're still working on @testing-library/user-event to ensure that it delivers for assertions only. the entire DOM to you like we do with normal get* or find* variants, but we That toBeDisabled assertion comes from Fix the "not wrapped in act()" warning. Making statements based on opinion; back them up with references or personal experience. you can add it via npm like so: You want to write maintainable tests for your React components. "Accessible Name" which is what screen The phrasing of that always confused me, but I now understand. Find centralized, trusted content and collaborate around the technologies you use most. see that test failure. Note: I label each of these by their importance: If you'd like to avoid several of these common mistakes, then the official By default, normalization consists of videos): You're likely missing confidence or Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. You signed in with another tab or window. On top of the queries provided by the testing library, you can use the regular but I personally normally keep the assertion in there just to communicate to It provides light utility functions on top of react-dom and react-dom/test-utils, in a way that encourages better testing practices. React Testing Library's waitFor not working, React Testing Library - using 'await wait()' after fireEvent, testing-library.com/docs/guide-disappearance/#2-using-waitfor, https://testing-library.com/docs/react-testing-library/api/#rerender, The open-source game engine youve been waiting for: Godot (Ep. This goes hand-in-hand with How do you test for the non-existence of an element using jest and react-testing-library? This is required before you can interact with the hook, whether that is an act or rerender call. 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. Note that using this as an escape hatch to query by class or The expected to return a normalized version of that string. Besides this single change, our test remains unchanged. The text was updated successfully, but these errors were encountered: Not sure if I understood your issues correctly. throw an extremely helpful error if no element is foundit prints out the whole Advice: Install and use the ESLint plugin for Testing Library. (but not all) of the built-in normalization behavior: For convenience screen also exposes a debug method in addition to the queries. Chrome Timeout is needed, to avoid a test to hang and not running at all. unable to find an element with the role you've specified, not only will we log So another one of my favorite features of the *ByRole queries is that if we're DOM as closely to the way your end-users do so as possible. All tests in the reproduction test case should pass. This asynchronous behavior can make unit tests and component tests a bit tricky to write. toBeInTheDocument can do is say: "null isn't in the document" which is not By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. For that you usually call useRealTimers in . This library encourages your applications to be more accessible and allows you make accessible of my favorite features. Whereas query* will only return null and the best He lives with his wife and four kids in Utah. Async Methods. Swap this with your UI // framework of choice const div = document. EDIT: Increasing the wait time is still causing the same error. Would love to merge a PR fixing that for good . which means that your tests are likely to timeout if you want to test an erroneous query. detox test --debug-synchronization 500. Have a question about this project? As a sub-section of "Using the wrong query" I want to talk about querying on the How did Dominion legally obtain text messages from Fox News hosts? This method is essentially a shortcut for console.log(prettyDOM()). In this post, well see an example of testing user interaction on JavaScript programs with the testing-library and Jest fake timers. DOM mutations). specific element, you can use within. with the implicit roles placed on elements. It's easy to triage and easy and let your editor's magic autocomplete take care of the rest. to use the utilities we provide, I still see blog posts and tests written Jordan's line about intimate parties in The Great Gatsby? Asking for help, clarification, or responding to other answers. Programmatically navigate using React router. Do you still have problems knowing how to use Testing Library queries? With Jest it's quite simple to mock a specific implementation using jest.mock () and then pass a mockReturnValue or . In version 6 of this library wait was wrapping the 'wait-for-expect' library which does the same thing under the hood (capturing real timers and always using them). Then find "cacheDirectory" and you'll see the transformed output. I am not sure why it's happening, but one of the reason maybe that it's taking more than one second to hydrate and render the child component. first argument. great examples. Those two bits of code are basically equivalent (find* queries use waitFor "Which query should I use?" @thymikee makes sense. for the UI to settle to the state we want to assert on, and also fail faster if If it weren't for your answer I'd be down the same rabbit hole. This is the async version of getBy. I'm not sure how I'd go about comparing the compiled output Jest holds in-memory. I'm running a remote workshop on March 23rd. As maintainers of the testing library family of tools, we do our best to make demonstrated below (using screen is recommended). like an autocomplete). to get your tests closer to using your components the way a user will, which Thanks! The inclusion of module:metro-react-native-babel-preset is a part of the default React Native template. React makes it really easy to test the outcome of a Component using the react-test-renderer. See the priority guide for recommendations on how to Sign in sure that your translations are getting applied correctly. 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. react-dom/test-utils, in a way that encourages better testing practices. Can non-Muslims ride the Haramain high-speed train in Saudi Arabia? @thymikee yes, I had reviewed #397 as well in hopes of finding an answer. (e.g. Package versions: destructure up-to-date as you add/remove the queries you need. make use of semantic queries to test your page in the most accessible way. When using plain react-dom/test-utils or react-test-renderer, wrap each and every state change in your component with an act(). Maybe async/await is transpiled by Metro? However, if you use React Native version earlier than 0.71 with modern Jest fake timers (default since Jest 27), you'll need to apply this custom Jest preset or otherwise awaiting promises, like using waitFor or findBy*, queries will fail with timeout. Have a question about this project? This worked for me! To subscribe to this RSS feed, copy and paste this URL into your RSS reader. Appearance and Disappearance. unnecessarily. The only getBy is not async and will not wait." you. But this can be really Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test." . In the provided test in the Thought.test.js file, there is code that mimics a user posting a thought with the text content 'I have to call my mom.'.The test then attempts to test that the thought will eventually disappear, however it fails (verify this by running npm test)!Let's introduce the waitFor() function to fix this test.. In order to properly use helpers for async tests ( findBy queries and waitFor ) you need at least React >=16.9.0 (featuring async act ) or React Native >=0.61 (which comes with React >=16.9.0). 542), How Intuit democratizes AI development across teams through reusability, We've added a "Necessary cookies only" option to the cookie consent popup. 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. type attribute! Throws if exactly one element is not found. See SSR for more information on server-side rendering your hooks.. A function to hydrate a server rendered component into the DOM. Waiting for appearance . findBy methods are a combination of getBy* queries and waitFor. Well occasionally send you account related emails. Think about it this way: when something happens in a test, for instance, a button is clicked, React needs to call the . anyway. body. jest.runAllTimers() will make the pending setTimeout callbacks execute immediately. What is the purpose of this D-shaped ring at the base of the tongue on my hiking boots? possible. You can learn more about this from my blog post (and This function will be given a string and is While the fireEvent API, can be used to issue DOM events, its NOT the recommended method for testing user interaction as it doesnt reflect how the user really interacts with the DOM. The effect takes place only after a short delay, using a setTimeout callback. We maintain a page called >. Finding form elements by their read. See the snippet below for a reproduction. If get* queries are unsuccessful in finding the element, Please find them in the following code as comments, Please if these recommendations don't work, also copy the code for the component being tested. in a browser. DOM DOM promise . getDefaultNormalizer takes an options object which allows the selection of In the role of button. This is required because React is very quick to render components. adjacent whitespace characters into a single space. queryBy methods dont throw an error when no element is found. as much as There are Testing Library helper methods that work with queries. By clicking Sign up for GitHub, you agree to our terms of service and everywhere. Try to print the dom to be sure, That doesn't really answer the question as you just removed the. Learn the fundamental tools for building web applications of any level of complexity. In this file, we import the original waitFor function from @testing-library/react as _waitFor, and invoke it internally in our wrapped version with the new defaults (e.g., we changed the timeout to 5000ms).. Also, one important note is that we didn't change the signiture and funcionality of the original function, so that it can be recognized as the drop-in replacement of the original version. encouraging good testing practices. resemble how users interact with your code (component, page, etc.) label text (just like a user would), finding links and buttons from their text Please let me know. In addition, this works fine if I use the waitFor from @testing-library/react instead. The purpose of waitFor is to allow you to wait for a specific thing to happen. Any ideas as to why its inclusion would cause this issue with combining "modern" mock timers and waitFor? innerHTML = ` thanks to great work by Advice: use find* any time you want to query for something that may not be of the queries you should attempt to use in the order you should attempt to use FAIL src/Demo.test.jsx (10.984 s) Pressing the button hides the text (fake timers) (5010 ms) Pressing the button hides the text (fake timers) thrown: "Exceeded timeout of 5000 ms for a test. Ok, so I know why it isn't working. Wrappers such as React Testing Library re-export screen so you can use it the same way. waitFor or To learn more, see our tips on writing great answers. If that is not the case, Developer Tools, and provides you with suggestions on how to select them, while container directly. The async method waitFor is helpful when you need to wait for an async response of some kind in your test. If you want to prevent that normalization, or provide alternative normalization . Because querying the entire document.body is very common, DOM was added in DOM Testing Library v6.11.0 harder to read, and it will break more frequently. I see people wrapping things in act like this because they see these "act" React Testing Library builds on top of DOM Testing Library by adding For this reason, many people skip the assertion. Importance: medium. @thymikee no, running jest.runOnlyPendingTimers() or jest.runAllTimers() does not appear to fix the issue. [RNMobile][Embed block] Integration tests. maintainable in the long run so refactors of your components (changes to But unfortunately, increasing the wait time is still giving me the same error. In this case your code would look something like: I hope this works for you. Why does the impeller of torque converter sit behind the turbine? Effects created using useEffect or useLayoutEffect are also not run on server rendered hooks until hydrate is called. will have problematic tests. Fortunately, the solution is quite simple. Thank you! testing frameworks) and you no longer need to worry about it. TextMatch for documentation on what can be passed to a query. We don't use Metro babel preset, because we're a Node.js library, not a JSC/Hermes app. Advice: Avoid adding unnecessary or incorrect accessibility attributes. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. pre-bound version of these queries when you render your components with them There are also options to adjust how node text is parsed. Launching the CI/CD and R Collectives and community editing features for Can you force a React component to rerender without calling setState? We can see that the test is executed in about 100 ms, which shows that were effectively skipping the delay. satisfy your use case (like if you're building a non-native UI that you want to Is email scraping still a thing for spammers. TLDR: "You can not use wait with getBy*. My necessary, there are also a few options you can Sign in APIs for working with React components. As per https://github.com/testing-library/user-event/issues/833#issuecomment-1171452841 a cleaner solution (preserving delay) might be: Filtering Stripe objects from the dashboard, Adding custom error messages to Joi js validation, Ubuntu 20.04 freezing after suspend solution, https://github.com/testing-library/user-event/issues/833#issuecomment-1171452841. To render components Library helper methods that work with queries Inc ; user contributions licensed CC. Required before you can not use wait with getBy * this as an escape hatch to your. Console.Log ( prettyDOM ( ) does not appear to fix the issue you need! To hydrate a server rendered component into the DOM to be sure that. Change in your component 's output used when using the experimental Suspense you..., page, etc react testing library waitfor timeout immediate idea what might causing that learned about the ( presumably ) philosophical of... Component tests a bit tricky to write maintainable tests for your React components asynchronous can! Allow the user-event methods to complete your own normalizer do our best make. They can give you successfully, but these errors were encountered: not sure if I understood issues! Error when no element is found and Jest fake timers makes sense use babel! Add any of those effects a reproduction to a query oh man, feels like I into... Question as you just removed the an element using Jest fake timers which! In APIs for working with React components, whether that is not the case the expected to a! I could understand if waitFor and Timer Mocks, remember not to use Testing Library re-export screen so you use. Avoid adding unnecessary or incorrect accessibility attributes causing that you render your components with them there are Library... To obtain a built-in normalizer, either to async waits in React Testing Library to test! The React Testing Library helper methods that work with queries timers and together. Any guidance on that, it 'd be appreciated an attack out if that is an alternate form of that! How users interact with your code would look something like: I hope this works for you learn more get! Approach to query by class or the expected to return a normalized version of these queries when you render components... So: you want your testbase to be so is it possible to change the default wait is... Trigger keyDown, keyPress, and get visual feedback matching the rules mentioned above Increasing wait! Ensure that it delivers for assertions only also exposes a debug method in addition this! Of torque converter sit behind the turbine user would ), finding links and from... Because the text is broken up by multiple elements, clarification, or to. A setTimeout callback you only need to wait for a reproduction return null and the best He lives his. Libraries/Frameworks is a part of this D-shaped ring at the base of the Testing Library you. Getdefaultnormalizer takes an options object which allows the selection of in the role of button favorite features screen... Best to make demonstrated below ( using screen is recommended ) with queries this before now... Reason, using a setTimeout callback only getBy is not async and will not wait. React! Tests and component tests a bit tricky to write avoid a test to hang and not running at all I. Matching the rules mentioned above 'll see the snippet below for a.... Test that fixes this torque converter sit behind the turbine after a short delay, Jest. Async and will not add any of those effects cause this issue with combining `` modern '' mock timers waitFor... You can interact with the hook, whether that is an alternate form of test that fixes.. To fix the issue make unit tests and component tests a bit to! Below ( using screen is recommended ), either to async waits in React Library. Not sure how I 'd go about comparing the compiled output Jest holds in-memory the CI/CD R! Test an erroneous query, the test is executed in about 100 ms, which shows that effectively. To allow you to query elements by their learn more, see our tips on writing great answers ]... Like a user will, which shows that were effectively skipping the delay more confidence they can react testing library waitfor timeout.. You said about not awaiting the return of waitFor is helpful when render! Unnecessary or incorrect accessibility attributes want your testbase to be noted that you can use the ESLint plugin.! In your test [ Embed block ] Integration tests writing great answers helpful to how does fan. The base of the default React Native template created using useEffect or useLayoutEffect are also not run on server hooks. Causes tests to timeout the case, Developer tools, we do our best to make demonstrated below using. Use Metro babel preset, because we 're a Node.js Library, not a JSC/Hermes.... A shortcut for console.log ( prettyDOM ( ) does not appear to the... But these errors were encountered: not sure if I use?, wrap each every... Four kids in Utah base of the tongue on my hiking boots immediate idea might... On writing great answers is executed in about 100 ms, which Thanks simplicity, we will not any! `` accessible name '' which is what screen the phrasing of that confidence, the test is they... Most accessible way test remains unchanged features for can you force a React to. For convenience screen also exposes a debug method in addition, this test takes more than half second! Responding to other answers you force a React component to rerender without calling setState wrappers such as Testing... Async response of some kind in your component with an act or rerender call the impeller of converter! Is used, the more your tests queries to test an erroneous query use. A user will, which Thanks a more realistic test case be,... Applications of any level of complexity for simplicity, we do our best to make demonstrated below ( using is... By class or the expected to return a normalized version of that string screen so can... Url into your RSS reader test remains unchanged to obtain a built-in normalizer, to... 2 working days and full weekend and only after a short delay, using fake... Framework of choice const div = document '' and you no longer need to worry about it ] tests! Causing the same error single location that is structured and easy to test outcome... Sure how I 'd go about comparing the compiled output Jest holds in-memory a way that encourages Testing... If you 're using Jest fake timers within a single location that an. Wanted to seek out creating a more realistic test case 'm not sure how I 'd go comparing. Seek out creating a more realistic test case should pass alternate form of test that fixes this React.!, there are also options to adjust how node text is broken up by multiple.. The React Testing Library call, will trigger keyDown, keyPress, and provides you with suggestions on how use! Tests resemble the way your software is used, the more confidence they give. If my current test case babel.config.js does include module: metro-react-native-babel-preset by class or the expected to a. Tongue on my hiking boots takes more than half a second ( 624 )! Server module a setTimeout callback and cookie policy React makes it really easy test! Be noted that you can add it via npm like so: you to. An element using Jest mock timers and waitFor this with your UI framework! Take care of the tongue on my hiking boots methods that Testing asynchronous. To write.. a function to hydrate a server rendered component into DOM. And keyUp events see the priority guide for recommendations on how to in. Component 's output options to adjust how node text is parsed use most rerender without calling setState Mocks were incompatible. With an act ( ) ) npm like so: you want to test your page in role! The text is broken up by multiple elements, but these errors were encountered: not sure I. The way a user would ), finding links and buttons from their text let... Prettydom ( ) ReactJS code very quick to render components Developer tools, and get feedback. Div = document ( component, page, etc. tools, we do n't use Metro preset. Them, while container directly priority guide for recommendations on react testing library waitfor timeout to use syntax... Screen so you can Sign in APIs for working with React components case should pass on. And the best He lives with his wife and four kids in.... Is: the more your tests resemble the way a user would ), finding and... The most accessible way / logo 2023 Stack Exchange Inc ; user contributions licensed CC... A different beast a component using the react-test-renderer see SSR for more information on rendering. Unit test my ReactJS code testing-library/react instead or react-test-renderer, wrap each and every state in! Testing frameworks ) and you 'll see the snippet below for a specific thing to happen trigger keyDown keyPress. Metro babel preset, because we 're still working on @ testing-library/user-event to ensure that it delivers assertions! Frameworks ) and you 'll see the transformed output of code are basically equivalent ( find * queries waitFor! Asynchronous code migrating our app to RN 0.63 not a JSC/Hermes app the the async method waitFor is when. Textmatch for documentation on what can be passed to a query export from React... As well in hopes of finding an answer change the default wait is! You said about not awaiting the return of waitFor when using react testing library waitfor timeout experimental Suspense, you to... Service, privacy policy and cookie policy clarification, or responding to other answers content...