dist/cursor/magento2-commerce/skills/magento-testing/SKILL.md
Write tests for Magento 2 — PHPUnit unit tests, integration tests, MFTF functional tests, and API tests. Use when implementing test coverage for modules, debugging, or setting up CI/CD test pipelines.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins magento-testingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Fetch live docs:
site:developer.adobe.com commerce testing for testing overviewhttps://developer.adobe.com/commerce/testing/functional-testing-framework/ for MFTF guidesite:developer.adobe.com commerce php development test for unit/integration test patternsPurpose: Test individual classes in isolation.
Test/Unit/ within the moduledev/tests/unit/phpunit.xml.distvendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist app/code/VendorName/ModuleName/Test/Unit/createMock()Purpose: Test module interactions with the Magento framework.
Test/Integration/ or dev/tests/integration/dev/tests/integration/phpunit.xml.distvendor/bin/phpunit -c dev/tests/integration/phpunit.xml.dist@magentoDbIsolation enabled — rolls back DB changes after each test@magentoAppArea — sets the application area (frontend, adminhtml)@magentoConfigFixture — sets config values for the test@magentoDataFixture — loads test dataPurpose: End-to-end browser tests.
Test/Mftf/Test/, Test/Mftf/ActionGroup/, Test/Mftf/Page/, Test/Mftf/Section/vendor/bin/mftf run:test <TestName>Purpose: Test REST and SOAP API endpoints.
dev/tests/api-functional/dev/tests/api-functional/phpunit_rest.xml.distPurpose: Code quality and standards.
dev/tests/static/vendor/bin/phpunit -c dev/tests/static/phpunit.xml.dist$this->createMock(ClassName::class) for dependencies$mock->expects($this->once())->method('getById')->willReturn($entity)ObjectManagerHelper from test frameworkIntegration tests use fixtures to set up test state:
@magentoDataFixture annotation points to a fixture file@magentoDbIsolation rolls back after testUnit test plugin classes independently — call the plugin method with a mock subject and verify behavior.
Unit test observer's execute() method with a mocked Observer/Event object.
@magentoDbIsolation to prevent test pollutiontestSaveThrowsExceptionWhenNameIsEmpty()Fetch the testing documentation for exact annotations, fixture patterns, and MFTF XML schema before writing tests.
development
Build with Spree's headless Next.js storefront — the official `spree/storefront` repo (Next.js 16 App Router with Server Actions and Turbopack, React 19 Server Components, Tailwind CSS 4, TypeScript 5, `@spree/sdk`, Sentry), server-only auth (httpOnly JWT cookies + publishable key), MeiliSearch faceted catalog, one-page checkout with Apple/Google Pay/Klarna/Affirm/SEPA, multi-region market routing, GA4 + JSON-LD SEO, and Vercel/Docker deployment. Use when forking or customizing the storefront, or evaluating headless adoption.
tools
Build Spree extensions as Rails engines — gem scaffolding, `bin/rails g spree:extension`, mounting routes/migrations/assets, the modern `prepend` decorator pattern (`*_decorator.rb` with `self.prepended(base)`), generators (`spree:model_decorator`, `spree:controller_decorator`), the four customization surfaces in preference order (Events > Webhooks > Dependencies > Decorators), Spree::Dependencies for swapping service objects, gem release/versioning, and the deprecated Deface engine. Use when building a reusable Spree extension or adding non-trivial customization to an app.
development
Build with Spree's event bus and Webhooks 2.0 — `Spree::Events` publication, `Spree::Subscriber` DSL with `subscribes_to` and `on`, wildcard matching, lifecycle events (`{model}.created/.updated/.deleted` via `publishes_lifecycle_events`), the canonical event catalog (order.*, payment.*, shipment.*, product.*), Webhooks 2.0 endpoints, HMAC-SHA256 signing (`X-Spree-Webhook-Signature`), exponential-backoff retries, and Sidekiq job orchestration. Use when wiring event-driven business logic, building webhook consumers, or replacing ActiveSupport callback chains.
tools
Cross-cutting Spree development patterns — the customization preference hierarchy (Events > Webhooks > Dependencies > Decorators), `Spree::Dependencies` service-object swapping, the `_decorator.rb` + `prepend` + `self.prepended` idiom, idempotent subscribers and webhook receivers, multi-store scoping discipline, prefixed IDs, calculator polymorphism (shipping/promotion/tax share the base), service-object composition with `dry-monads` or simple results, why to avoid `class_eval` reopening and Deface, and Spree-on-Rails idioms (Hotwire/Turbo Stimulus, ActiveStorage, Action Cable, Sidekiq). Use when designing the architecture of a Spree extension or solving cross-cutting concerns.