managarten/packages/test-config
2025-11-27 17:26:18 +01:00
..
jest.config.backend.js first implementation 2025-11-27 17:26:18 +01:00
jest.config.mobile.js first implementation 2025-11-27 17:26:18 +01:00
package.json first implementation 2025-11-27 17:26:18 +01:00
playwright.config.base.ts first implementation 2025-11-27 17:26:18 +01:00
README.md first implementation 2025-11-27 17:26:18 +01:00
tsconfig.json first implementation 2025-11-27 17:26:18 +01:00
vitest.config.base.ts first implementation 2025-11-27 17:26:18 +01:00
vitest.config.svelte.ts first implementation 2025-11-27 17:26:18 +01:00

@manacore/test-config

Shared test configurations for all projects in the Manacore monorepo.

Available Configurations

Jest Configuration for NestJS Backends

// jest.config.js
const baseConfig = require('@manacore/test-config/jest-backend');

module.exports = {
	...baseConfig,
	// Your project-specific overrides
};

Jest Configuration for React Native Mobile

// jest.config.js
module.exports = {
	preset: '@manacore/test-config/jest-mobile',
	// Your project-specific overrides
};

Vitest Configuration for Shared Packages

// vitest.config.ts
import { defineConfig, mergeConfig } from 'vitest/config';
import baseConfig from '@manacore/test-config/vitest-base';

export default mergeConfig(
	baseConfig,
	defineConfig({
		// Your project-specific overrides
	})
);

Vitest Configuration for SvelteKit Web Apps

// vitest.config.ts
import { defineConfig, mergeConfig } from 'vitest/config';
import svelteConfig from '@manacore/test-config/vitest-svelte';
import { sveltekit } from '@sveltejs/kit/vite';

export default mergeConfig(
	svelteConfig,
	defineConfig({
		plugins: [sveltekit()],
		// Your project-specific overrides
	})
);

Playwright Configuration for E2E Tests

// playwright.config.ts
import { defineConfig } from '@playwright/test';
import baseConfig from '@manacore/test-config/playwright';

export default defineConfig({
	...baseConfig,
	use: {
		...baseConfig.use,
		baseURL: 'http://localhost:5173',
	},
	// Your project-specific overrides
});

Features

Common Settings Across All Configs

  • Coverage Thresholds: 80% for lines, functions, branches, statements
  • Mock Management: Auto-clear, restore, and reset mocks between tests
  • Timeout: 10s default for tests
  • Verbose Output: In CI environments
  • Error Handling: Fail on deprecated APIs

NestJS Backend Config

  • TypeScript support via ts-jest
  • Automatic exclusion of modules, DTOs, entities
  • Module path aliases support
  • Coverage collection from source files

React Native Mobile Config

  • jest-expo preset
  • Transform ignore patterns for React Native modules
  • Support for @manacore packages
  • Coverage from src/ and app/ directories

Vitest Configs

  • Modern, fast test runner
  • Coverage via v8
  • ESM support
  • Global test APIs (describe, it, expect)

Playwright Config

  • Multi-browser testing (Chromium, Firefox, WebKit)
  • Mobile viewport testing
  • Built-in retry logic
  • Video/screenshot on failure
  • Auto-start web server

Adding to Your Project

  1. Install peer dependencies:
# For NestJS backend
pnpm add -D jest ts-jest @types/jest

# For React Native mobile
pnpm add -D jest jest-expo @testing-library/react-native

# For SvelteKit web
pnpm add -D vitest @vitest/coverage-v8 jsdom

# For E2E tests
pnpm add -D @playwright/test
  1. Create config file in your project root (see examples above)

  2. Add test scripts to package.json:

{
	"scripts": {
		"test": "jest", // or "vitest run"
		"test:watch": "jest --watch", // or "vitest"
		"test:cov": "jest --coverage", // or "vitest run --coverage"
		"test:e2e": "playwright test"
	}
}

Customization

Each config can be extended with project-specific settings:

// Override coverage thresholds
export default mergeConfig(baseConfig, {
	test: {
		coverage: {
			thresholds: {
				lines: 90, // More strict for critical packages
			},
		},
	},
});