mirror of
https://github.com/readest/readest.git
synced 2026-04-30 04:20:53 +00:00
Some checks are pending
Deploy to vercel on merge / build_and_deploy (push) Waiting to run
110 lines
4 KiB
Markdown
110 lines
4 KiB
Markdown
# Testing
|
|
|
|
Readest uses three test tiers, all powered by [Vitest](https://vitest.dev/).
|
|
|
|
## Unit Tests (`pnpm test`)
|
|
|
|
Runs tests in a **jsdom** environment. No browser or Tauri runtime required.
|
|
|
|
```bash
|
|
pnpm test # Run all unit tests
|
|
pnpm test -- src/__tests__/utils/misc.test.ts # Run a single file
|
|
pnpm test -- --watch # Watch mode
|
|
```
|
|
|
|
- **Config:** `vitest.config.mts`
|
|
- **Pattern:** `src/**/*.test.ts` (excludes `*.browser.test.ts` and `*.tauri.test.ts`)
|
|
- **Environment:** jsdom
|
|
- **Use for:** Pure logic, utilities, services that don't need real browser APIs or Tauri IPC.
|
|
|
|
## Browser Tests (`pnpm test:browser`)
|
|
|
|
Runs tests in a **real Chromium** browser via Playwright. Required for code that depends on Web Workers, SharedArrayBuffer, OPFS, or other browser-only APIs.
|
|
|
|
```bash
|
|
pnpm test:browser
|
|
```
|
|
|
|
- **Config:** `vitest.browser.config.mts`
|
|
- **Pattern:** `src/**/*.browser.test.ts`
|
|
- **Browser:** Chromium (headless, via `@vitest/browser-playwright`)
|
|
- **Use for:** WASM modules (e.g. `@tursodatabase/database-wasm`), Web Worker integration, browser-specific storage APIs.
|
|
|
|
## Tauri Integration Tests (`pnpm test:tauri`)
|
|
|
|
Runs Vitest tests **inside the Tauri WebView**, with access to Tauri IPC and native plugin commands. Tests execute in the actual app environment.
|
|
|
|
### Step 1: Start the Tauri App
|
|
|
|
In one terminal, start the app with the `webdriver` feature enabled:
|
|
|
|
```bash
|
|
pnpm tauri:dev:test # Dev mode (uses tauri dev server, faster iteration)
|
|
pnpm tauri:build:test # Debug release build (closer to production)
|
|
```
|
|
|
|
These commands compile the Rust backend with `--features webdriver`, which:
|
|
|
|
- Includes `tauri-plugin-webdriver` (embeds a W3C WebDriver server on port 4445)
|
|
- Adds a runtime capability granting plugin permissions to remote URLs (`http://127.0.0.1:*`), so Vitest's browser-mode iframe can call Tauri IPC
|
|
|
|
Keep this running while you run tests.
|
|
|
|
### Step 2: Run Tests
|
|
|
|
In another terminal:
|
|
|
|
```bash
|
|
pnpm test:tauri
|
|
```
|
|
|
|
Vitest connects directly to the embedded WebDriver server (port 4445) in the running Tauri app and executes tests inside its WebView.
|
|
|
|
- **Config:** `vitest.tauri.config.mts`
|
|
- **Pattern:** `src/**/*.tauri.test.ts`
|
|
- **Browser provider:** `@vitest/browser-webdriverio` (connects to port 4445)
|
|
- **Use for:** Tauri plugin commands (turso, native-tts, etc.), native filesystem, Tauri IPC.
|
|
|
|
### Writing Tauri Tests
|
|
|
|
Tests access Tauri IPC via a shared helper:
|
|
|
|
```typescript
|
|
import { invoke } from '../tauri/tauri-invoke';
|
|
|
|
it('calls a plugin command', async () => {
|
|
const result = await invoke('plugin:turso|load', { options: { path: 'sqlite::memory:' } });
|
|
expect(result).toBeDefined();
|
|
});
|
|
```
|
|
|
|
The `invoke()` helper accesses `window.top.__TAURI_INTERNALS__` (Vitest runs in an iframe, Tauri injects IPC into the main frame).
|
|
|
|
**Limitations:** Only custom invoke commands and plugin commands listed in the webdriver capability work. Standard Tauri JS APIs (e.g. `@tauri-apps/api`) that rely on `URL: local` may not work from the Vitest iframe.
|
|
|
|
## E2E Tests (WDIO)
|
|
|
|
Full end-to-end tests using WebDriverIO, for UI-level testing against the running Tauri app. Same two-step workflow as Tauri integration tests.
|
|
|
|
```bash
|
|
# Terminal 1: start the app (same as for Tauri integration tests)
|
|
pnpm tauri:dev:test
|
|
|
|
# Terminal 2: run E2E tests
|
|
pnpm test:e2e
|
|
```
|
|
|
|
- **Config:** `wdio.conf.ts`
|
|
- **Pattern:** `e2e/**/*.e2e.ts`
|
|
- **Framework:** Mocha (via `@wdio/mocha-framework`)
|
|
- **Connects to:** port 4445 (embedded WebDriver server)
|
|
- **Use for:** UI interaction tests, window management, navigation flows.
|
|
|
|
## Test File Naming
|
|
|
|
| Suffix | Runner | Environment |
|
|
| ------------------- | ------------------- | --------------------- |
|
|
| `*.test.ts` | `pnpm test` | jsdom |
|
|
| `*.browser.test.ts` | `pnpm test:browser` | Chromium (Playwright) |
|
|
| `*.tauri.test.ts` | `pnpm test:tauri` | Tauri WebView |
|
|
| `*.e2e.ts` | `pnpm test:e2e` | Tauri app (WDIO) |
|