javascript-testing

JavaScript/TypeScript Testing Skill

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "javascript-testing" with this command: npx skills add autumnsgrove/groveengine/autumnsgrove-groveengine-javascript-testing

JavaScript/TypeScript Testing Skill

When to Activate

Activate this skill when:

  • Writing JavaScript or TypeScript tests

  • Testing Svelte, React, or Vue components

  • Setting up Vitest or Jest configuration

  • Working with mocks, spies, or test utilities

  • Running tests or checking coverage

Framework Selection

Use Case Framework

SvelteKit, Vite projects Vitest (recommended)

Non-Vite projects, React Native Jest

Quick Commands

Vitest

npx vitest # Watch mode npx vitest run # Single run (CI) npx vitest run --coverage npx vitest --ui # Visual UI

Jest

pnpm test pnpm test --watch pnpm test --coverage

Test Structure: AAA Pattern

import { describe, it, expect, beforeEach } from 'vitest';

describe('UserService', () => { let userService: UserService;

beforeEach(() => {
    userService = new UserService();
});

it('should create a new user with valid data', () => {
    // Arrange
    const email = 'test@example.com';
    const password = 'secure_pass123';

    // Act
    const result = userService.register(email, password);

    // Assert
    expect(result.success).toBe(true);
    expect(result.user.email).toBe(email);
});

});

Vitest Setup (SvelteKit)

// vite.config.ts import { defineConfig } from 'vitest/config'; import { sveltekit } from '@sveltejs/kit/vite';

export default defineConfig({ plugins: [sveltekit()], test: { include: ['src/**/*.{test,spec}.{js,ts}'], globals: true, environment: 'jsdom', setupFiles: ['./src/tests/setup.ts'], } });

Mocking

Vitest

import { vi } from 'vitest';

vi.mock('./api', () => ({ fetchUser: vi.fn() }));

vi.mocked(fetchUser).mockResolvedValue({ id: 1, name: 'John' });

Jest

jest.mock('./api', () => ({ fetchUser: jest.fn() }));

Component Testing (Svelte)

import { render, screen, fireEvent } from '@testing-library/svelte'; import Counter from './Counter.svelte';

it('should increment count on click', async () => { render(Counter, { props: { initialCount: 0 } });

const button = screen.getByRole('button', { name: /increment/i });
await fireEvent.click(button);

expect(screen.getByText('Count: 1')).toBeInTheDocument();

});

Common Assertions

// Equality expect(value).toBe(expected); // Strict === expect(value).toEqual(expected); // Deep equality

// Truthiness expect(value).toBeTruthy(); expect(value).toBeNull();

// Arrays/Objects expect(array).toContain(item); expect(obj).toHaveProperty('key');

// Exceptions expect(() => fn()).toThrow('error');

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

Query Priority (Testing Library)

  • getByRole

  • Accessible queries (best)

  • getByLabelText

  • Form fields

  • getByPlaceholderText

  • Inputs

  • getByText

  • Non-interactive elements

  • getByTestId

  • Last resort

Directory Structure

src/ ├── lib/ │ ├── components/ │ │ ├── Button.svelte │ │ └── Button.test.ts │ └── utils/ │ ├── format.ts │ └── format.test.ts └── tests/ ├── setup.ts └── integration/

SvelteKit Testing

Load Functions

import { load } from './+page.server';

it('should fetch posts', async () => { const mockFetch = vi.fn().mockResolvedValue({ json: () => Promise.resolve([{ id: 1 }]) });

const result = await load({ fetch: mockFetch } as any);
expect(result.posts).toHaveLength(1);

});

Form Actions

import { actions } from './+page.server';

it('should validate login', async () => { const formData = new FormData(); formData.set('email', 'test@example.com');

const request = new Request('http://localhost', {
    method: 'POST',
    body: formData
});

const result = await actions.default({ request } as any);
expect(result.success).toBe(true);

});

Related Resources

See AgentUsage/testing_javascript.md for complete documentation including:

  • Jest configuration

  • Async testing patterns

  • SvelteKit-specific patterns

  • CI/CD integration

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

svelte5-development

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

code-quality

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python-testing

No summary provided by upstream source.

Repository SourceNeeds Review