Integration Testing Skill

Dynamic path: All paths below use components// as a placeholder. The actual directory depends on the testing component defined in sdd/sdd-settings.yaml. Delegate to the techpack-settings skill for directory path resolution — it maps component type (testing) + name to a filesystem path (e.g., type=testing, name=integration → components/testing-integration/).

SKILLWorkflows/SDDGITHUBCLAUDE_CODEVSCODE

Markdown

--- name: integration-testing-standards description: Integration testing patterns - database setup/teardown, API testing, contract testing, and Testkube execution. user-invocable: false ---

Integration Testing Skill

**Dynamic path:** All paths below use `components/<testing-component>/` as a placeholder. The actual directory depends on the testing component defined in `sdd/sdd-settings.yaml`. Delegate to the `techpack-settings` skill for directory path resolution — it maps component type (`testing`) + name to a filesystem path (e.g., `type=testing, name=integration` → `components/testing-integration/`).

Tests that verify multiple components working together with real infrastructure. Integration tests run in Kubernetes via Testkube for environment parity.

---

Overview

| Aspect | Details | |--------|---------| | Location | `components/<testing-component>/tests/integration/` | | Framework | Vitest | | Executor | Testkube | | Runs In | Kubernetes cluster | | Written By | Tester agent |

---

Test Structure

Directory Organization

components/<testing-component>/
├── tests/
│   └── integration/
│       ├── api/
│       │   ├── users.test.ts
│       │   ├── auth.test.ts
│       │   └── plans.test.ts
│       ├── db/
│       │   └── migrations.test.ts
│       └── helpers/
│           ├── client.ts
│           ├── database.ts
│           └── seed.ts
├── testsuites/
│   └── integration-suite.yaml
└── fixtures/
    └── seed-data.sql

---

Resource Files

For detailed guidance, read these on-demand:

  • [database-strategies.md](resources/database-strategies.md) — Transaction rollback, truncate, cleanup
  • [api-testing.md](resources/api-testing.md) — HTTP client, test patterns, examples
  • [authentication.md](resources/authentication.md) — Login helpers, protected endpoint tests
  • [testkube.md](resources/testkube.md) — Test definition YAML, suites, running tests

---

Contract Testing

Request/Response Validation

import { describe, it, expect } from 'vitest';
import Ajv2020 from 'ajv/dist/2020.js';
import openApiSpec from '../../../../contract/openapi.json';

const ajv = new Ajv2020({ allErrors: true });

describe('API Contract Compliance', () => {
  describe('POST /api/users', () => {
    it('response matches OpenAPI schema', async () => {
      const response = await client.post('/api/users', validUserData);

      const schema = openApiSpec.paths['/api/users'].post.responses['201'].content['application/json'].schema;
      const validate = ajv.compile(schema);
      const valid = validate(response.data);

      expect(valid).toBe(true);
      if (!valid) {
        console.error('Schema validation errors:', validate.errors);
      }
    });
  });
});

---

Rules

  • **Real infrastructure** - Use actual database, no mocks for I/O
  • **Environment parity** - Tests run in Kubernetes like production
  • **Cleanup after each test** - Leave database in clean state
  • **Independent tests** - Tests must not depend on each other
  • **Idempotent tests** - Running twice produces same result
  • **Reference spec and issue** - Use `@spec` and `@issue` JSDoc tags
  • **Given/When/Then structure** - Clear test organization
  • **Handle async properly** - Await all database and HTTP operations
  • **Reasonable timeouts** - Set appropriate timeouts for network operations

---

Summary Checklist

Before committing integration tests, verify:

  • [ ] Tests use real database (not mocked)
  • [ ] Database cleanup happens after each test
  • [ ] `@spec` and `@issue` tags present in file header
  • [ ] Each acceptance criterion has corresponding tests
  • [ ] Tests follow Given/When/Then structure
  • [ ] HTTP client properly configured for test environment
  • [ ] Authentication helpers used for protected endpoints
  • [ ] Error scenarios tested (400, 401, 403, 404, 409, 500)
  • [ ] Testkube YAML definition created/updated
  • [ ] Tests run successfully via `testkube run test`

---

Input / Output

This skill defines no input parameters or structured output.