К основному содержанию
скилл CX Codex

bun-test-basics — скилл для Claude Code: тесты на bun:test

Скилл подсказывает синтаксис bun:test: ассерты, describe/it, модификаторы skip, only, each и запуск тестов.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add secondsky/claude-skills --skill bun-test-basics -a claude-code
Открыть на GitHub

Что делает bun-test-basics

Скилл даёт агенту шпаргалку по встроенному тестраннеру Bun. Внутри — как писать тесты через import { test, expect, describe } from "bun:test", какие файлы Bun находит сам (*.test.ts, *_test.ts, *.spec.ts, *_spec.ts), и как запускать: bun test, отдельный файл или фильтр по имени через --test-name-pattern.

Отдельный блок — модификаторы. test.skip пропускает тест, test.todo оставляет заглушку, test.failing помечает известный баг, test.each разворачивает таблицу кейсов, test.concurrent и test.serial управляют параллельностью. Есть список матчеров: равенство, числа, строки, массивы, объекты, исключения, промисы.

Осторожно с test.only. В Bun 1.3 и новее bun test в CI завершается с ненулевым кодом, если файл его использует. Это инструмент для локальной отладки, коммитить его не стоит. Из CLI-флагов пригодятся --timeout (по умолчанию 5000 мс), --bail, --watch, --randomize с --seed, а для CI — репортер --reporter=junit с --reporter-outfile.

Какие задачи решает

  • написать первый тест на bun:test без чтения документации
  • развернуть таблицу однотипных кейсов через test.each
  • пометить известный баг через test.failing, чтобы он не валил сборку
  • выгрузить результаты тестов в JUnit XML для CI
  • разобраться, почему expect is not defined

Примеры запросов агенту

  • покажи, как написать тест на bun:test с describe и expect
  • сделай параметризованный тест через test.each для сложения
  • как запустить только тесты с «addition» в имени?

Как установить bun-test-basics

1Через Skills CLI (Vercel)

npx skills add secondsky/claude-skills --skill bun-test-basics -a claude-code

2Вручную: положить файлы

~/.claude/skills/bun-test-basics/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/bun-test-basics/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о bun-test-basics

Как установить bun-test-basics в Claude?

Выполните npx skills add secondsky/claude-skills --skill bun-test-basics -a claude-code. После этого скилл окажется в ~/.claude/skills/bun-test-basics/SKILL.md.

Что делает bun-test-basics?

Подсказывает агенту синтаксис bun:test: импорты, describe/it, модификаторы skip, only, todo, failing, each, набор матчеров и флаги CLI.

Чем опасен test.only?

В Bun 1.3 и новее bun test в CI падает с ненулевым кодом, если в файле остался test.only. Используйте его только для локальной отладки.

Исходный текст

SKILL.md · MIT
---
name: bun-test-basics
description: "Use for bun:test syntax, assertions, describe/it, test.skip/only/each, and basic patterns."
metadata:
  version: "1.0.0"
license: MIT
---

# Bun Test Basics

Bun ships with a fast, built-in, Jest-compatible test runner. Tests run with the Bun runtime and support TypeScript/JSX natively.

## Quick Start

```bash
# Run all tests
bun test

# Run specific file
bun test ./test/math.test.ts

# Run tests matching pattern
bun test --test-name-pattern "addition"
```

## Writing Tests

```typescript
import { test, expect, describe } from "bun:test";

test("2 + 2", () => {
  expect(2 + 2).toBe(4);
});

describe("math", () => {
  test("addition", () => {
    expect(1 + 1).toBe(2);
  });

  test("subtraction", () => {
    expect(5 - 3).toBe(2);
  });
});
```

## Test File Patterns

Bun discovers test files matching:
- `*.test.{js|jsx|ts|tsx}`
- `*_test.{js|jsx|ts|tsx}`
- `*.spec.{js|jsx|ts|tsx}`
- `*_spec.{js|jsx|ts|tsx}`

## Test Modifiers

```typescript
// Skip a test
test.skip("not ready", () => {
  // won't run
});

// Only run this test
test.only("focus on this", () => {
  // other tests won't run
});
// NOTE: in Bun 1.3+ `bun test` exits non-zero in CI when a file uses
// `test.only`. Use it for local debugging only — never commit it.

// Placeholder for future test
test.todo("implement later");

// Expected to fail
test.failing("known bug", () => {
  throw new Error("This is expected");
});
```

## Parameterized Tests

```typescript
test.each([
  [1, 1, 2],
  [2, 2, 4],
  [3, 3, 6],
])("add(%i, %i) = %i", (a, b, expected) => {
  expect(a + b).toBe(expected);
});

// With objects
test.each([
  { a: 1, b: 2, expected: 3 },
  { a: 5, b: 5, expected: 10 },
])("add($a, $b) = $expected", ({ a, b, expected }) => {
  expect(a + b).toBe(expected);
});
```

## Concurrent Tests

```typescript
// Run tests in parallel
test.concurrent("async test 1", async () => {
  await fetch("/api/1");
});

test.concurrent("async test 2", async () => {
  await fetch("/api/2");
});

// Force sequential when using --concurrent
test.serial("must run alone", () => {
  // runs sequentially
});
```

## Common Matchers

```typescript
// Equality
expect(value).toBe(4);           // Strict equality
expect(obj).toEqual({ a: 1 });   // Deep equality
expect(value).toStrictEqual(4);  // Strict + type

// Truthiness
expect(value).toBeTruthy();
expect(value).toBeFalsy();
expect(value).toBeNull();
expect(value).toBeDefined();
expect(value).toBeUndefined();

// Numbers
expect(value).toBeGreaterThan(3);
expect(value).toBeGreaterThanOrEqual(3);
expect(value).toBeLessThan(5);
expect(value).toBeCloseTo(0.3, 5);  // Floating point

// Strings
expect(str).toMatch(/pattern/);
expect(str).toContain("substring");
expect(str).toStartWith("Hello");
expect(str).toEndWith("world");

// Arrays
expect(arr).toContain(item);
expect(arr).toContainEqual({ a: 1 });
expect(arr).toHaveLength(3);

// Objects
expect(obj).toHaveProperty("key");
expect(obj).toHaveProperty("key", value);
expect(obj).toMatchObject({ a: 1 });

// Exceptions
expect(() => fn()).toThrow();
expect(() => fn()).toThrow("message");
expect(() => fn()).toThrow(CustomError);

// Async
await expect(promise).resolves.toBe(value);
await expect(promise).rejects.toThrow();

// Negation
expect(value).not.toBe(5);
```

## CLI Options

```bash
# Timeout per test (default 5000ms)
bun test --timeout 20

# Bail after N failures
bun test --bail
bun test --bail=10

# Watch mode
bun test --watch

# Random order
bun test --randomize
bun test --seed 12345

# Concurrent execution
bun test --concurrent
bun test --concurrent --max-concurrency 4

# Filter by name
bun test -t "pattern"
```

## Output Reporters

```bash
# Dots (compact)
bun test --dots

# JUnit XML (CI/CD)
bun test --reporter=junit --reporter-outfile=./results.xml
```

## Common Errors

| Error | Cause | Fix |
|-------|-------|-----|
| `Test timeout` | Test exceeds 5s | Use `--timeout` or optimize |
| `No tests found` | Wrong file pattern | Check file naming |
| `expect is not defined` | Missing import | Import from `bun:test` |
| `Assertion failed` | Test failure | Check expected vs actual |

## When to Load References

Load `references/matchers.md` when:
- Need complete matcher reference
- Custom matcher patterns

Load `references/cli-options.md` when:
- Full CLI flag reference
- Advanced execution options

© secondsky · MIT · secondsky/claude-skills

Похожие скиллы

Всё по теме «Тесты и QA» →
bun-runtime affaan-m Скилл объясняет агенту, когда брать Bun вместо Node, и даёт команды для установки, тестов и деплоя на Vercel. CX Codex +1 4 700установок bun-development sickn33 Скилл помогает вести JavaScript и TypeScript-разработку на Bun: создавать проекты, переносить код с Node.js и разбирать проблемы рантайма. CX Codex +1 2 800установок bun brianlovin Переключает агента на среду Bun вместо привычных Node.js и npm. Настраивает команды запуска, встроенные базы данных и сервер без внешних пакетов. CX Codex +1 2 800установок playwright-generate-test официальный github Создаёт Playwright-тест по сценарию через Playwright MCP. Подходит, когда нужно пройти сценарий в браузере перед генерацией кода. 18 162установок unit-test-vue-pinia официальный github Помогает писать и проверять юнит-тесты для Vue 3, TypeScript, Vitest и Pinia. Пригодится, когда тесты уже есть, но лезут во внутренности компонентов. 1 800установок test-driven-development sickn33 Внедряет строгий цикл разработки через тестирование: сначала падающий тест, затем минимальный рабочий код и рефакторинг. Пригодится при исправлении багов и добавлении новой логики. CX Codex +1 1 400установок

Из того же набора89

api-rate-limiting Скилл помогает добавить ограничение частоты запросов к API: алгоритмы token bucket, sliding window и вариант на Redis. Пригодится, когда открываешь публичный API или делишь доступ по тарифам. CX Codex +1 491установок design-system-creation Скилл помогает агенту собрать дизайн-систему: токены, типографику, компоненты и документацию к ним. Пригодится, когда стандарты интерфейса нужно зафиксировать до начала вёрстки. CX Codex +1 481установок technical-specification Скилл ведёт агента по шаблону технической спецификации: требования, архитектура, API, план внедрения, тесты и риски. Пригодится, когда фичу планируют до кода. CX Codex +1 470установок mobile-app-testing Скилл для тестирования мобильных приложений: юнит-тесты, UI-автоматизация, E2E и производительность. Пригодится, когда нужно настроить тестовую инфраструктуру. CX Codex +1 467установок threejs Скилл с готовыми примерами и справочниками по Three.js: сцены, материалы, свет, шейдеры, загрузка GLTF. Пригодится, когда собираете 3D в браузере. CX Codex +1 460установок ml-model-training Скилл ведёт агента по полному циклу обучения модели: подготовка данных, разбивка, тренировка и оценка. Пригодится, когда нужно собрать классификатор или регрессию без забытых шагов. CX Codex +1 457установок payment-gateway-integration Скилл для подключения Stripe, PayPal или Square: платящие интенты, подписки, вебхуки и возвраты. Пригодится, когда пишете чекаут или биллинг. CX Codex +1 454установок api-reference-documentation Собирает справочник по REST API из спецификации OpenAPI: эндпоинты, авторизация, примеры запросов и ответов. Пригодится, когда нужен developer portal или SDK-референс. CX Codex +1 454установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой