Skip to content

test(store-adapter): better-sqlite3 native binding probe 강화#271

Open
tellang wants to merge 1 commit into
mainfrom
fix/sqlite-native-binding-graceful-skip
Open

test(store-adapter): better-sqlite3 native binding probe 강화#271
tellang wants to merge 1 commit into
mainfrom
fix/sqlite-native-binding-graceful-skip

Conversation

@tellang
Copy link
Copy Markdown
Owner

@tellang tellang commented May 16, 2026

Summary

store-adapter*.test.mjs 의 graceful skip 로직이 await import("better-sqlite3")
성공 시 즉시 통과시켰다. dynamic loader 는 native .node 파일 미해상 상황
에서도 module export 자체는 성공시키는 경우가 있어 (예: Node v26.0.0 +
better-sqlite3 12.6.2 — node-gyp rebuild 실패), 후속 new Database(...) /
db.prepare("...") 호출에서 TypeError: Cannot read properties of null (reading "prepare") 가 발생했다.

release prepare.mjs 가 native test runner 의 exit non-zero 를 그대로
감지해 release 가 abort 되는 회귀.

변경

import 성공 후 즉시 new ctor(":memory:") + prepare("SELECT 1").get()
probe 호출. native binding 미해상 시 throw → t.skip(...) 으로 graceful
skip.

환경 동작
CI (Linux Ubuntu, fresh install) native binding 정상 → 실제 sqlite path 검증 (기존과 동일)
mac Node v26 + better-sqlite3 12.6.2 native binding 미해상 → graceful skip (회귀 가드)

Test plan

  • node --test tests/unit/store-adapter.test.mjs tests/unit/store-adapter-tier2.test.mjs
    → 4 tests / 2 pass / 2 skipped / 0 fail (native binding 미해상 환경)
  • npm run lint clean
  • CI green (Linux Ubuntu — 실제 sqlite path 검증 유지)

동기

v10.21.0 release 의 prepare:execute 가 본 native binding 미해상으로 abort
하여 --skip-tests 우회로 진행. 본 fix 로 후속 release 는 mac Node v26
환경에서도 정상 prepare 통과 가능.

`store-adapter*.test.mjs` 의 graceful skip 로직이 `await import("better-sqlite3")`
성공 시 즉시 통과시켰다. 하지만 dynamic loader 는 native `.node` 파일 미해상
상황에서도 module export 자체는 성공시키는 경우가 있어 (예: Node v26.0.0 +
better-sqlite3 12.6.2 — node-gyp rebuild 실패), 후속 `new Database(...)` 또는
`db.prepare("...")` 호출에서 `Cannot read properties of null (reading "prepare")`
같은 TypeError 가 발생했다. release `prepare.mjs` 가 native test runner 의
exit non-zero 를 그대로 감지해 release 가 abort 되는 회귀.

## 변경

`import` 성공 후 즉시 `new ctor(":memory:")` + `prepare("SELECT 1").get()`
probe 호출. native binding 미해상 시 throw → `t.skip(...)` 으로 graceful
skip. CI (Linux fresh install) 에서는 native binding 정상이라 기존대로
실제 sqlite path 검증, mac Node v26 같은 환경에서는 skip 으로 회귀 가드.

## Test

- `node --test tests/unit/store-adapter.test.mjs tests/unit/store-adapter-tier2.test.mjs`
  → 4 tests / 2 pass / 2 skipped / 0 fail (native binding 미해상 환경)
- CI (Linux Ubuntu, fresh install) 에서는 native binding 정상이라 변화 없이
  pass 유지 기대
- `npm run lint` clean

## 동기

v10.21.0 release 의 `prepare:execute` 가 본 native binding 미해상으로 abort
하여 `--skip-tests` 우회로 진행했다. 본 fix 로 후속 release 는 mac Node v26
환경에서도 정상 prepare 통과 가능.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant