Description
@testing-library/dom
version: I think it is 8.20.1 (used by @testing-library/react 13.4.0)- Testing Framework and version: react 13.4.0
- jest 28.1.3
- DOM Environment: jsdom 19.0.0
Relevant code or config:
screen.getByText('foo', { selector: '[href^=blob:]' });
The selector is incorrect and should be:
screen.getByText('foo', { selector: '[href^="blob:"]' });
What you did:
What happened:
$ npm test
> [email protected] test
> jest
console.error
Error: Uncaught [TypeError: Cannot set property message of which has only a getter]
at reportException (/home/julien/travail/git/bug-testing-library/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
at Timeout.task [as _onTimeout] (/home/julien/travail/git/bug-testing-library/node_modules/jsdom/lib/jsdom/browser/Window.js:519:9)
at listOnTimeout (node:internal/timers:569:17)
at processTimers (node:internal/timers:512:7) {
detail: TypeError: Cannot set property message of which has only a getter
at onTimeout (/home/julien/travail/git/bug-testing-library/node_modules/@testing-library/react/node_modules/@testing-library/dom/dist/wait-for.js:21:19)
at handleTimeout (/home/julien/travail/git/bug-testing-library/node_modules/@testing-library/react/node_modules/@testing-library/dom/dist/wait-for.js:159:14)
at Timeout.task [as _onTimeout] (/home/julien/travail/git/bug-testing-library/node_modules/jsdom/lib/jsdom/browser/Window.js:514:19)
at listOnTimeout (node:internal/timers:569:17)
at processTimers (node:internal/timers:512:7),
type: 'unhandled exception'
}
at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:70:23)
at reportException (node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:70:28)
at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:519:9)
FAIL ./file.test.js (5.467 s)
✕ reproduces the error (5008 ms)
● reproduces the error
TypeError: Cannot set property message of which has only a getter
at onTimeout (node_modules/@testing-library/react/node_modules/@testing-library/dom/dist/wait-for.js:21:19)
at handleTimeout (node_modules/@testing-library/react/node_modules/@testing-library/dom/dist/wait-for.js:159:14)
at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:514:19)
● reproduces the error
thrown: "Exceeded timeout of 5000 ms for a test.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."
5 | import {render, screen} from '@testing-library/react'
6 |
> 7 | test('reproduces the error', async () => {
| ^
8 | render(<a href="http://example.org">foo</a>);
9 | await screen.findByText('foo', {selector: '[href^=http:]'});
10 | });
at Object.test (file.test.js:7:1)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 5.719 s, estimated 6 s
Ran all test suites.
Reproduction:
I couldn't reproduce in codesandbox but here is an example:
https://github.com/julienw/bug-testing-library
- git clone https://github.com/julienw/bug-testing-library
- cd bug-testing-library
- npm i
- npm test
Problem description:
We don't have a good error, instead we have a timeout.
The actual error is in a console error message above, which isn't ideal.
I haven't tried with newer versions of jsdom and jest yet.
Suggested solution:
I'm not sure to be honest...