How to Run Kimi-Code Tests: A Complete Guide to Vitest Testing in the MoonshotAI Repository

Use pnpm test to run the full Vitest test suite across the Kimi-Code monorepo, or pnpm exec vitest run <path> for specific test files.

Running tests in the MoonshotAI/kimi-code repository requires understanding its Vitest-based testing architecture. The project uses a monorepo structure with multiple packages and applications, each with their own test suites. This guide explains how to run Kimi-Code tests at every level—from the entire codebase down to individual files.

Prerequisites for Running Kimi-Code Tests

Before executing any tests, verify your environment meets the minimum requirements specified in the root package.json:

  • Node.js ≥ 24.15.0
  • pnpm 10.33.0

Install all workspace dependencies once:

pnpm install

This command installs Vitest and all dependencies across the monorepo's packages and applications.

Understanding the Kimi-Code Test Architecture

The Kimi-Code repository uses Vitest as its test runner with a multi-project configuration. The key configuration lives in vitest.config.ts at the repository root:

// vitest.config.ts
export default defineConfig({
  test: {
    projects: ['packages/*', 'apps/kimi-code', 'apps/vscode'],
    coverage: { /* ... */ },
  },
});

Vitest discovers test files in three project scopes:

  • packages/* — All library packages (e.g., tree-sitter-bash)
  • apps/kimi-code — The CLI/TUI application
  • apps/vscode — The VS Code extension

Test files follow the standard Vitest naming convention: *.test.ts or *.spec.ts.

Running the Full Kimi-Code Test Suite

CI-Style Test Run

Execute all tests once across the entire monorepo:

pnpm test

This runs vitest run as defined in the root package.json scripts.test entry. The command exits with a non-zero code if any test fails, making it suitable for CI pipelines.

Development Watch Mode

For local development with automatic re-runs on file changes:

pnpm test:watch

This invokes vitest without the run flag, enabling Vitest's file watcher.

Coverage Report Generation

Generate an HTML coverage report in the coverage/ directory:

pnpm test:coverage

This executes vitest run --coverage using the coverage configuration from vitest.config.ts.

Running Specific Kimi-Code Tests

Single Test File

Target a specific test file using a glob pattern:

pnpm exec vitest run packages/tree-sitter-bash/test/parser-compound.test.ts

Package-Specific Tests

Some packages include their own vitest.config.ts that narrows test discovery. For example, packages/tree-sitter-bash/vitest.config.ts limits tests to test/**/*.test.ts:

cd packages/tree-sitter-bash
pnpm exec vitest run

The root configuration automatically merges package-level configs when it lists packages/* as a project.

Interactive UI Mode

Launch Vitest's browser-based UI for test exploration:

pnpm exec vitest --ui

Kimi-Code Test Commands Reference

Command Purpose
pnpm test Run all tests once (CI mode)
pnpm test:watch Watch mode for development
pnpm test:coverage Full suite with coverage report
pnpm exec vitest run <path> Run specific test file or pattern
pnpm exec vitest --ui Interactive browser UI

Example: Running Bash Parser Tests

The tree-sitter-bash package demonstrates typical Kimi-Code test structure. Its tests reside in packages/tree-sitter-bash/test/parser-compound.test.ts and use standard Vitest APIs (describe, it, expect):


# Install dependencies

pnpm install

# Run all tests (includes Bash parser tests)

pnpm test

# Run only Bash parser tests

pnpm exec vitest run packages/tree-sitter-bash/test/parser-compound.test.ts

# Watch mode for Bash package

cd packages/tree-sitter-bash && pnpm exec vitest

Key Configuration Files for Kimi-Code Testing

File Location Role
package.json Repository root Defines test, test:watch, test:coverage scripts
vitest.config.ts Repository root Multi-project Vitest configuration with three scopes
vitest.config.ts packages/tree-sitter-bash/ Package-level config limiting discovery to test/**/*.test.ts
parser-compound.test.ts packages/tree-sitter-bash/test/ Example test suite for the Bash parser

Summary

  • Kimi-Code uses Vitest configured as a monorepo test runner via vitest.config.ts
  • pnpm test runs the complete test suite suitable for CI
  • pnpm test:watch enables file-watching for development
  • Individual tests execute with pnpm exec vitest run <path>
  • Package-level configs in packages/*/vitest.config.ts extend the root configuration
  • Coverage reports generate with pnpm test:coverage

Frequently Asked Questions

Why does Kimi-Code use Vitest instead of Jest?

Vitest provides native ESM support, faster execution through Vite's esbuild integration, and built-in TypeScript handling without additional configuration. As implemented in MoonshotAI/kimi-code, the unified Vitest configuration manages multiple projects through a single vitest.config.ts file rather than separate Jest configurations per package.

How do I debug a failing test in Kimi-Code?

Use the interactive UI with pnpm exec vitest --ui or add --reporter=verbose to any command for detailed output. You can also isolate a single test with it.only() or describe.only() in your test file, then run pnpm test:watch for rapid iteration.

Can I run tests without installing all dependencies?

No. The monorepo structure requires pnpm install at the root to properly link workspace dependencies. Individual packages depend on shared utilities in packages/*, so the full installation is mandatory for tests to resolve imports correctly.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →