diff --git a/.changepacks/changepack_log_1X3KB51ltpzMpxIMRC5gP.json b/.changepacks/changepack_log_1X3KB51ltpzMpxIMRC5gP.json
new file mode 100644
index 0000000..d47398a
--- /dev/null
+++ b/.changepacks/changepack_log_1X3KB51ltpzMpxIMRC5gP.json
@@ -0,0 +1,5 @@
+{
+ "changes": { "package.json": "Patch" },
+ "note": "Fix bun issue",
+ "date": "2026-01-02T12:51:33.602062900Z"
+}
diff --git a/src/__tests__/__snapshots__/snapshot.test.tsx.snap b/src/__tests__/__snapshots__/snapshot.test.tsx.snap
index 7afba47..3c12b30 100644
--- a/src/__tests__/__snapshots__/snapshot.test.tsx.snap
+++ b/src/__tests__/__snapshots__/snapshot.test.tsx.snap
@@ -2,13 +2,11 @@
exports[`SnapshotTest React element snapshot 1`] = `
"
+ before
- before
-
- SnapshotTestInner
-
- after
+ SnapshotTestInner
+ after
"
`;
diff --git a/src/__tests__/dom.test.tsx b/src/__tests__/dom.test.tsx
new file mode 100644
index 0000000..8ce5d10
--- /dev/null
+++ b/src/__tests__/dom.test.tsx
@@ -0,0 +1,36 @@
+import { describe, expect, test } from 'bun:test'
+import { createElement } from 'react'
+import { render } from '../index.ts'
+
+function DomTestInner() {
+ return createElement(
+ 'div',
+ {
+ className: 'dom-test-inner',
+ },
+ 'DomTestInner',
+ )
+}
+
+function DomTest() {
+ return createElement(
+ 'div',
+ {
+ className: 'dom-test',
+ },
+ 'before',
+ createElement(DomTestInner),
+ 'after',
+ )
+}
+
+describe('SnapshotTest', () => {
+ test('HTML element snapshot with render', () => {
+ const { container } = render(createElement(DomTest))
+ expect(container.children[0]).toHaveClass('dom-test')
+ })
+
+ test('HTML element snapshot with render', () => {
+ expect(createElement(DomTest)).toHaveClass('dom-test')
+ })
+})
diff --git a/src/__tests__/index.test.ts b/src/__tests__/index.test.ts
index 24df394..3b5e02a 100644
--- a/src/__tests__/index.test.ts
+++ b/src/__tests__/index.test.ts
@@ -9,15 +9,6 @@ describe('expect with ReactElement', () => {
})
})
-describe('expect with HTMLElement', () => {
- test('should format HTMLElement', () => {
- const div = document.createElement('div')
- div.textContent = 'Hello DOM'
- // @ts-expect-error - mock transforms HTMLElement to string at runtime
- expect(div).toContain('Hello DOM')
- })
-})
-
describe('expect with primitive value', () => {
test('should pass through primitive values', () => {
expect('hello').toBe('hello')
diff --git a/src/index.ts b/src/index.ts
index 52eac1c..e3f79e9 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -12,15 +12,33 @@ if (!GlobalRegistrator.isRegistered) {
GlobalRegistrator.register()
expect.extend(matchers)
+ const methods = ['toMatchSnapshot', 'toMatchInlineSnapshot', 'toContain']
+
const originalExpect = expect
test.mock.module('bun:test', () => {
const expect = (value: unknown) => {
- if (isReactElement(value)) {
- const { container } = render(value as ReactElement)
- return originalExpect(formatHTMLElement(container))
- }
- if (value instanceof HTMLElement) {
- return originalExpect(formatHTMLElement(value))
+ if (value instanceof HTMLElement || isReactElement(value)) {
+ const element =
+ value instanceof HTMLElement
+ ? value
+ : (render(value as ReactElement).container
+ .children[0] as HTMLElement)
+ const stringRet = originalExpect(formatHTMLElement(element))
+ const jsonRet = originalExpect(element)
+ for (const method of methods) {
+ ;(jsonRet as unknown as Record)[method] = (
+ ...args: unknown[]
+ ) => {
+ return (
+ stringRet as unknown as Record<
+ string,
+ (...args: unknown[]) => unknown
+ >
+ )[method]?.(...(args as [object, string]))
+ }
+ }
+
+ return jsonRet
}
return originalExpect(value)
}