Description
Describe the feature you'd like:
I was chatting with @JacobMGEvans, who was asking if waitFor
could be used to test a CLI written in Node asyncronously. I thought you should be able to waitFor
any callback and options that don't depend on the DOM., but ended up getting an error with this simple example:
import assert from "assert"
import { waitFor } from "@testing-library/dom"
let done = false
setTimeout(() => (done = true), 1000)
await waitFor(() => assert(done))
/Users/nick/Downloads/waitFor/node_modules/@testing-library/dom/dist/helpers.js:32
throw new Error('Could not find default container');
^
Error: Could not find default container
at getDocument (/Users/nick/Downloads/waitFor/node_modules/@testing-library/dom/dist/helpers.js:32:11)
at waitFor (/Users/nick/Downloads/waitFor/node_modules/@testing-library/dom/dist/wait-for.js:15:40)
at /Users/nick/Downloads/waitFor/node_modules/@testing-library/dom/dist/wait-for.js:167:54
at Object.asyncWrapper (/Users/nick/Downloads/waitFor/node_modules/@testing-library/dom/dist/config.js:23:23)
at waitForWrapper (/Users/nick/Downloads/waitFor/node_modules/@testing-library/dom/dist/wait-for.js:167:35)
at file:///Users/nick/Downloads/waitFor/test.js:6:7
at ModuleJob.run (node:internal/modules/esm/module_job:194:25)
@testing-library/dom
version: 8.19.1
Suggested implementation:
Run conditional checks on anything that requires a DOM implementing. However, I'm not against assuming there is a DOM when the user attempts to pass DOM elements explicitly.
Ideally this should also work without Jest or Node, as it's valid to run CLI tests in any JavaScript runtime or testing framework, and the user likely wouldn't need Jest to conveniently set up a DOM and our matchers.
Describe alternatives you've considered:
We could publish a separate package that doesn't depend on the DOM, but I personally don't think it's worth the maintenance burden for a single function. Alternatively, we could make our own testing library with additional utilities for CLIs, though I'd want us to reach consensus on overall CLI testing goals before implementing new APIs.
Teachability, Documentation, Adoption, Migration Strategy:
A simple patch to the waitFor
function wouldn't require any documentation, though a separate package would.