Unit Testing
Tests are *.spec.ts files colocated with the source they cover, written with Vitest and run per package through Nx. See WritingUnitTests.md for the full guide.
Running
npx nx run core:test # all core tests
npx nx run core:test -t 'Name' # isolate by describe/it name
npx nx run core:test --watch # watch mode
Use -t to run only the tests related to your change first; run the full package target before finishing.
Writing
- Use the standard Vitest API (
describe,it,expect,beforeEach,vi). Globals are enabled, so imports fromvitestare optional — match the style of neighboring specs. - Place the spec next to the module:
packages/core/xml/index.spec.tscoverspackages/core/xml/index.ts. - Every behavior change in shared (non-platform-specific) logic should add or extend a spec.
Environment Constraints
- Tests run in Node, not on a device.
packages/core/vitest.setup.tsstubs the platform globals (__IOS__,__ANDROID__, minimalNSObject-style mocks) so modules can load — real iOS/Android APIs do NOT exist here. - If a test needs more native surface, extend the mocks in
vitest.setup.ts; do not stub natives inline per spec. - Behavior that depends on the real native runtime cannot be unit tested — it belongs in the
apps/automatede2e suite, which requires a simulator/emulator. Do not attempt to run it unless explicitly asked. - Keep tests deterministic: no network calls, no timing-sensitive assertions without fake timers (
vi.useFakeTimers()).