Write once, test everywhere
The same test code works across React, Vue, Playwright and DOM testing. Learn once, test any UI framework.
Atomic Testing composes tiny, reusable component drivers into portable test scenes — so the same semantic test runs across frameworks, libraries, and environments. Learn once, test any UI.
pnpm add @atomic-testing/core @atomic-testing/react-19Switch the runtime tab — notice the scene definition and the test body never change. Only the import and mount line differ.
import { createTestEngine } from '@atomic-testing/react-19';
import { HTMLButtonDriver, HTMLComponentDriver } from '@atomic-testing/component-driver-html';
import { byDataTestId } from '@atomic-testing/core';
// One scene definition — reused on every runtime
const scene = {
greeting: { locator: byDataTestId('greeting'), driver: HTMLComponentDriver },
button: { locator: byDataTestId('welcome-btn'), driver: HTMLButtonDriver },
};
it('welcomes the user on click', async () => {
const engine = createTestEngine(<Welcome name="Alice" />, scene);
expect(await engine.parts.greeting.getText()).toBe('Hello Alice!');
await engine.parts.button.click();
expect(await engine.parts.button.getText()).toBe('Welcome!');
await engine.cleanUp();
});
Each primitive is tiny and replaceable. Compose them like atoms into molecules — locators and drivers snap into scenes, scenes into engines, engines into suites that outlive any framework.
The same test code works across React, Vue, Playwright and DOM testing. Learn once, test any UI framework.
select.selectByLabel('Option 2') instead of brittle DOM queries. Focus on behavior, not implementation.
Reuse component drivers across Material-UI, Bootstrap and custom components. Component library changes don’t break your tests.
Framework migrations, library upgrades and environment changes become trivial. Your testing investment scales with your app.
Four building blocks orchestrate every test.
Declare which components matter to the test.
Find components with byDataTestId() & friends.
Use semantic APIs instead of DOM manipulation.
Orchestrates everything together, in any runtime.
Get your first portable test running in five minutes.