Skip to main content

معلومات المصدر

المستودع
ffsshhttiikk/opencode-agents-skills
آخر نشاط في المصدر
٢٨ فبراير ٢٠٢٦ في ٢٢:٥٥
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٣
التفرعات
٢

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
testing
description
Testing best practices and strategies
license
MIT
compatibility
opencode
metadata
{"audience":"developers","category":"code-quality"}
## What I do - Write effective unit tests - Implement integration tests - Use mocking and stubs appropriately - Achieve good code coverage (aim for 80%+) - Follow testing pyramid (many unit, fewer integration, few e2e) - Use property-based testing - Test edge cases and error conditions - Maintain test isolation ## When to use me When writing tests for any codebase. ## Testing Pyramid ``` /\ /E2E\ Few: End-to-end tests (Cypress, Playwright) /------\ /Int'grt'n\ Some: Integration tests /------------\ / Unit \ Many: Unit tests (pytest, Jest, Go testing) /----------------\ ``` ## Unit Testing Principles ```python # GOOD: Focused tests with clear names def test_user_creation_with_valid_email_succeeds(): user = User(email="test@example.com", name="Test User") assert user.email == "test@example.com" assert user.is_active is True assert user.created_at is not None def test_user_creation_with_invalid_email_raises_exception(): with pytest.raises(ValidationError): User(email="invalid-email", name="Test") # GOOD: Use descriptive test names # BAD: test_create_user, test_user, test1 # Test one thing per test def test_login_with_wrong_password_returns_error(): # Arrange user = create_test_user() auth_service = AuthService(user_repository) # Act result = auth_service.login(user.email, "wrong_password") # Assert assert result.is_error() assert result.error_code == "INVALID_PASSWORD" assert result.token is None ``` ## Mocking and Stubbing ```python from unittest.mock import Mock, MagicMock, patch import pytest def test_user_service_sends_welcome_email(): # Arrange user = create_test_user() email_service = Mock(spec=EmailService) user_service = UserService( user_repository=Mock(), email_service=email_service ) # Act user_service.create(user) # Assert email_service.send_welcome_email.assert_called_once_with(user.email) def test_user_repository_is_called_on_update(): # Arrange user_repository = Mock(spec=UserRepository) service = UserService(user_repository=user_repository) user = User(id=1, name="Updated") # Act service.update(user) # Assert user_repository.update.assert_called_once_with(user) def test_cache_is_checked_before_database(): # Use patch for dependency injection with patch('myapp.services.get_cache') as mock_cache: mock_cache.return_value.get.return_value = None service = DataService() result = service.get_data("key") # Verify cache was checked mock_cache.return_value.get.assert_called_once_with("key") # Verify database was called # ... assertions ``` ## Property-Based Testing ```python from hypothesis import given, strategies as st @given( st.integers(min_value=0), st.integers(min_value=1) ) def test_addition_is_commutative(a, b): assert a + b == b + a @given( email=strategy( st.text(min_size=1), st.from_regex(r'[a-z]+@[a-z]+\.[a-z]+') ) ) def test_email_normalization(email): normalized = normalize_email(email) assert "@" in normalized assert " " not in normalized ``` ## Test Organization ``` tests/ ├── __init__.py ├── conftest.py # Shared fixtures ├── unit/ │ ├── __init__.py │ ├── test_models.py │ ├── test_services.py │ └── test_utils.py ├── integration/ │ ├── __init__.py │ ├── test_api.py │ └── test_database.py ├── e2e/ │ ├── __init__.py │ ├── test_auth_flow.py │ └── test_checkout_flow.py └── fixtures/ ├── users.json └── products.json ``` ## Test Fixtures ```python import pytest from myapp import create_app, db @pytest.fixture def app(): app = create_app({ "TESTING": True, "DATABASE_URL": "sqlite:///:memory:" }) with app.app_context(): db.create_all() yield app @pytest.fixture def client(app): return app.test_client() @pytest.fixture def db_session(app): return db.session @pytest.fixture def test_user(db_session): user = User(email="test@example.com", name="Test") db_session.add(user) db_session.commit() return user @pytest.fixture def auth_header(test_user): token = generate_token(test_user) return {"Authorization": f"Bearer {token}"} ```
عرض على GitHub