Skip to main content

testing-contract

Validates external APIs and service contracts, ensuring that your application correctly consumes and produces expected data structures.

설치로 이동

소스 정보

저장소
paulpas/agent-skill-router
최근 소스 활동
2026년 6월 9일 18:00
감지된 SKILL.md 언어
영어
스타
4
포크
1

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
testing-contract
description
Validates external APIs and service contracts, ensuring that your application correctly consumes and produces expected data structures.
license
MIT
compatibility
opencode
metadata
{"version":"1.0.0","domain":"coding","triggers":"contract testing, service contracts, API contracts, contract validation","role":"implementation","scope":"implementation","output-format":"code","related-skills":"testing-unit, testing-integration, testing-end-to-end","archetypes":"tactical, diagnostic","anti_triggers":"system testing, manual testing, acceptance testing","response_profile":{"verbosity":"medium","directive_strength":"high","abstraction_level":"tactical"}}
# Contract Testing Implements contract testing methods to validate the agreements between application services and external APIs. Ensure both the consumer and provider follow specified contracts like data formats and structures. ## When to Use - When your application relies on third-party services. - To ensure that changes in API specifications do not break your application. - Before deployment to avoid runtime issues caused by contract violations. ## Core Workflow 1. **Choose Contract Testing Tool** Select a framework tailored for contract testing (e.g., `Pact`, `Hoverfly`). ```bash # For JavaScript npm install @pact-foundation/pact ``` 2. **Define Consumer and Provider Contracts** Define what your service expects from external APIs. ```javascript const { Pact } = require('@pact-foundation/pact'); const provider = new Pact({ consumer: "YourService", provider: "ExternalAPI" }); provider .uponReceiving('a request for data') .withRequest('GET', '/data') .willRespondWith({ status: 200, body: { message: "Success" } }); ``` 3. **Run Contract Tests** Execute the contract tests and ensure compliance with expectations. ```bash npm test ``` 4. **Handle Contract Violations** Repair code or update your contracts as necessary based on your test results. ## Implementation Patterns ### Pattern 1: Using Pact for Consumer-Driven Contracts ```javascript const { Pact } = require('@pact-foundation/pact'); describe('Pact with Our API', () => { const provider = new Pact({ consumer: 'Consumer', provider: 'APIProvider', }); beforeAll(() => provider.setup()); it('it should return a successful response', async () => { // Arrange await provider.addInteraction({ state: 'data exists', uponReceiving: 'a request for data', withRequest: { method: 'GET', path: '/data' }, willRespondWith: { status: 200, body: { message: 'Success' } }, }); // Act const response = await fetch('http://localhost:3000/data'); const body = await response.json(); // Assert expect(body.message).toEqual('Success'); }); afterAll(() => provider.finalize()); }); ``` --- ## Implementation Patterns ### Pattern 2: Provider Verification with Pact (Python) On the provider side, use `pact-python` to verify that the API satisfies the consumer's expectations: ```python from pact import Verifier def test_provider_meets_consumer_contract(): """Verify the provider API satisfies the Pact contract.""" verifier = Verifier( provider="APIProvider", provider_base_url="http://localhost:8000", ) # Load the Pact file published by the consumer pact_url = "pacts/consumer-apiprovider.json" # Verify all interactions from the consumer's Pact success, logs = verifier.verify_pacts( pact_url, provider_states_setup_url=f"{verifier.provider_base_url}/_pact/setup", verbose=False, ) assert success, f"Provider verification failed: {logs}" ``` The consumer writes tests and publishes a Pact file. The provider loads that file and verifies every interaction actually works against the real API. This catches breaking changes before deployment. ```python # Example Pact file structure (generated by consumer tests) # { # "consumer": {"name": "Consumer"}, # "provider": {"name": "APIProvider"}, # "interactions": [{ # "description": "a request for data", # "request": {"method": "GET", "path": "/data"}, # "response": {"status": 200, "body": {"message": "Success"}} # }] # } ``` ## Constraints ### MUST DO - Regularly update contracts and documentation to reflect changes. - Ensure that the API service is functional before running contract tests. ### MUST NOT DO - Bypass contract tests; they are essential for integration continuity. - Assume defaults; always explicitly define contracts.
GitHub에서 보기