codeception/module-symfony
Codeception module for Symfony: boots the kernel in functional tests, exposes the service container and Symfony services, and integrates Doctrine data cleanup, mailer and profiler assertions so you can write expressive end-to-end tests. Official module maintained by the Codeception team.
TestCase/actor helpers or consume the community module. The assertions in the 3.10/3.11 releases — seeNumQueriesIsLessThan, seeUserIsGranted, seeMessengerQueueCount, runCommand, mockService — are each roughly a week of internal plumbing nobody wants to maintain.5.4 / 6.4 / 7.4 / 8.1 with PHP ^8.2. The module's compatibility window becomes an input constraint on any Symfony major upgrade plan — check it before committing dates.dontSeeDuplicateQueries), schema validation (seeDoctrineSchemaIsValid), and queue-count assertions map directly to production incident classes, not just test hygiene. Useful ammunition when arguing for tech-debt capacity.grabLastSentEmail() from ?Email to ?RawMessage is a live example of why dev dependencies still need a pinning policy and an upgrade audit step.Adopt when:
Look elsewhere when:
WebTestCase. The value here is the Codeception actor DSL — porting is real work, not a drop-in.To executives: No license cost, no vendor negotiation, no procurement cycle — it's MIT and installs as a dev dependency. What it buys is reduced manual QA toil on regression-prone paths: outbound email, background jobs, permission checks, database access patterns. The honest counterweight is that it's a small community project (~96 stars) with effectively one maintainer and no support contract. Mitigation is cheap: pin the version, keep tests written so the harness can be swapped, and treat it as infrastructure you rent rather than own.
To engineering: It's the official Codeception module for Symfony, and it's actively released — 3.10 and 3.11 landed in the current cycle, with 20 new methods in 3.11 alone: EntityManager reset after a failed flush, service mocking that survives kernel reboots, voter assertions with subjects, Messenger transport inspection and in-process consumption, and console ExecutionResult assertions. That replaces a pile of bespoke test base classes. Prerequisites are PHP 8.2+, Codeception 5, and awareness of the 3.10 mailer refactor — grabLastSentEmail() now returns ?RawMessage, so any test calling Email-specific methods needs a type narrowing pass.
Recommendation: Adopt as a dev-only dependency, pin to a minor version, and budget a half-day audit of existing email assertions if we're below 3.10. Re-evaluate at every Symfony major and at every maintainer change.
How can I help you explore Laravel packages today?