| name | create-functional-test |
| description | Create functional test for HTTP controllers and LiveComponents. Use when testing web endpoints, form submissions, API responses, or LiveComponent interactions. Tests make HTTP requests and verify responses/DOM. |
Create Functional Test
Generate functional test for HTTP controllers and LiveComponents.
When to Use
- HTTP endpoints (GET/POST/PUT/DELETE)
- Form submissions
- LiveComponents
- API responses
Inputs/Outputs
| Input | Example | Output |
|---|---|---|
| controller_class | GetArticlesController | BC/Tests/Adapters/Controller/.../ControllerNameTest.php |
| route | /admin/articles | - |
| method | GET, POST | - |
| fixtures | ['ArticleFactory' => 5] | - |
Process
| Step | Action |
|---|---|
| Create | Use template: test-functional.php.tpl |
| Run | php bin/phpunit path/to/Test.php |
| Validate | make cs-fixer && make stan && make ta |
Structure
Functional Test (extends BaseFunctionalTestCase):
final class ControllerNameTest extends BaseFunctionalTestCase {
use Factories;
public function testMethodName(): void {
// Setup with Foundry (auto-persists)
EntityFactory::createOne(['name' => 'Test']);
// Request (use $this->client, NOT static::createClient())
$this->client->request('GET', '/route');
// Assertions
self::assertResponseIsSuccessful();
self::assertSelectorExists('.element');
}
}
See: docs/GLOSSARY.md#functional-test for detailed definition
Rules
Setup:
- Use Foundry (NOT DataBuilder)
- Foundry auto-persists and commits
- NO manual
repository->save()or$em->flush()
Assertions:
- HTTP:
assertResponseIsSuccessful(),assertResponseRedirects(),assertResponseStatusCodeSame(404) - DOM:
assertSelectorExists('.class'),assertSelectorTextContains('h1', 'Title'),assertSelectorCount(3, '.item')
CRITICAL:
- Use
$this->client(NOTstatic::createClient()) - Extends
BaseFunctionalTestCase - Use trait
Factories - Performance: ~550ms/test (DB purge + HTTP request)
Templates
test-functional.php.tpl
Location: .claude/templates/
References
- Functional test definition:
docs/GLOSSARY.md#functional-test - Testing strategy:
docs/testing.md#functional - Base test case:
src/Shared/Tests/BaseFunctionalTestCase.php