testing-library / testing-library/react-testing-library
Having `afterEach(cleanup)` in the test setup file breaks exported `screen` module on Bun test
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 19.7k
- Forks
- 1.2k
- Avg merge
- 3d 16h
- Merged PRs (30d)
- 1
Description
@testing-library/reactversion:15.0.7- Testing Framework and version:
Bun test v1.1.21 - DOM Environment:
@happy-dom/global-registrator@14.10.1
Relevant code or config:
test.setup.ts
import { GlobalRegistrator } from '@happy-dom/global-registrator';
import { cleanup } from '@testing-library/react';
import { expect, afterEach } from 'bun:test';
import * as matchers from '@testing-library/jest-dom/matchers';
GlobalRegistrator.register();
declare module 'bun:test' {
interface Matchers<T> extends matchers.TestingLibraryMatchers<any, void> {}
interface AsymmetricMatchers extends matchers.TestingLibraryMatchers<any, void> {}
}
expect.extend(matchers);
afterEach(cleanup);
Component.spec.tsx
import { act, render, screen } from '@testing-library/react';
import { TextAreaInput } from './TextAreaInput.component';
import { describe, it } from 'bun:test';
describe('TextAreaInput', () => {
it('Should show in the DOM', async () => {
const { getByRole } = await act(() => render(<TextAreaInput />));
// Works fine!
getByRole('textbox')
// throws an error
screen.getByRole('textbox');
// TypeError: For queries bound to document.body a global document has to be available... Learn more: https://testing-library.com/s/screen-global-error
});
});
What you did:
I'm just trying to test a component using the screen exported by react testing library using Bun test.
What happened:
everything was smooth, until I tried to use the screen exported from the react testing library it threw an error about "global document has to be available",
upon inspecting, removing afterEach(cleanup) from the test setup file or writing afterEach(cleanup) in each test file will make it works,
Reproduction:
just run bun test --preload test.setup.ts
Problem description:
using the screen exported while having the cleanup code in the test setup will break the test
Suggested solution:
just use the returned screen from the render function.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running bun test --preload test.setup.ts with test.setup.ts and Component.spec.tsx as shown. Trace how afterEach(cleanup) interacts with the exported screen and the document used by render. Done means the reproduction can use exported screen while retaining setup-level cleanup, with a regression test covering Bun.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript
- Domain
- frontend, testing-qa
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 50/100