# @vyriy/jest-config

Shared Jest config for Vyriy projects.

Tags: jest, config, testing, typescript
Source: https://vyriy.dev/docs/jest/

---

# @vyriy/jest-config

Part of [Vyriy](https://vyriy.dev) - a calm architecture toolkit for TypeScript, React, SSR, SSG, APIs, and cloud-ready apps.

Shared Jest config for Vyriy projects.

## Purpose

This package provides the base Jest setup used in Vyriy repositories for:

- TypeScript test runs
- SWC transforms
- JSDOM environment
- coverage defaults
- JUnit reporting

## Coverage

Coverage is enabled by default and collected from:

```ts
[
  '<rootDir>/**/*.{ts,tsx,js,jsx,mjs,cjs}',
  '!<rootDir>/**/*.d.ts',
  '!<rootDir>/**/*.stories.{ts,tsx}',
  '!<rootDir>/**/*.types.ts',
  '!<rootDir>/**/types.ts',
  '!<rootDir>/*.config.ts',
  '!<rootDir>/consumer/**',
];
```

Coverage paths ignore generated output, package manager state, Storybook output, and common build folders:

```ts
[
  '/node_modules/',
  '<rootDir>/storybook-static/',
  '<rootDir>/dist/',
  '<rootDir>/build/',
  '<rootDir>/bin/',
  '<rootDir>/.bin/',
  '<rootDir>/.storybook/',
  '<rootDir>/coverage/',
  '<rootDir>/.yarn/',
  '<rootDir>/consumer/',
];
```

Jest also ignores these generated and dependency directories while resolving modules and discovering tests:

```ts
[
  '/node_modules/',
  '<rootDir>/coverage/',
  '<rootDir>/dist/',
  '<rootDir>/storybook-static/',
  '<rootDir>/consumer/',
];
```

Reports are written to `coverage` using `json`, `text`, `text-summary`, `lcov`, `clover`, and `cobertura` reporters. The shared default requires 100% global coverage for branches, functions, lines, and statements.

## CI Reports

The config includes `jest-junit` alongside the default Jest reporter. This writes a JUnit report to `coverage/junit.xml`, which CI systems such as GitLab can publish as a test report artifact.
Jest transformer, reporter, environment, and style proxy packages are resolved from this shared config package, so consumers only need the config package and their local Jest CLI.

The transform ignore rules keep normal dependencies ignored but allow Vyriy packages and the ESM Markdown/unified ecosystem used by SSG and docs packages to pass through SWC.

JSDOM uses Node export conditions in this shared config so server-oriented packages, including the AWS SDK, resolve their Node builds during tests. A CommonJS setup file provides Node's `TextEncoder` and `TextDecoder` globals for dependencies that expect them at import time.

## Install

With npm:

```bash
npm install -D @vyriy/jest-config jest
```

With Yarn:

```bash
yarn add -D @vyriy/jest-config jest
```

Install `jest` in the consumer project so CLI binaries are available.

## Usage

Create `jest.config.mjs` in your project:

```js
export { default } from '@vyriy/jest-config';
```

If you need local overrides:

```ts
import baseConfig, { type Config } from '@vyriy/jest-config';

const config: Config = {
  ...baseConfig,
  coverageThreshold: {
    global: {
      branches: 80,
      functions: 80,
      lines: 80,
      statements: 80,
    },
  },
};

export default config;
```

## Current Vyriy Usage

In this repository the root Jest config is a thin wrapper:

```js
export { default } from '@vyriy/jest-config';
```

See the article with a complete testing setup walkthrough: <https://vyriy.dev/examples/vyriy-jest-config/>.
