Юнит тестирование
Вы можете юнит тестировать свои контроллеры так же, как и методы юнит тестирования любого другого класса.
Представьте себе следующий контроллер:
/**
* @Route("/foo")
*/
class FooController extends AbstractController
{
/**
* @var SomeDependency
*/
private $someDependency;
public function __construct(SomeDependency $someDependency)
{
$this->someDependency = $someDependency;
}
/**
* @Route("/bar/{id}", name="foo_bar")
*/
public function bar($id)
{
$result = $this->someDependency->someMethod($id)
if (null === $result) {
return new Response('Error', Response::HTTP_NOT_FOUND);
}
return new Response($result, Response::HTTP_OK);
}
}
ДляВ этом примере вы можете написать следующий модульный тест (замените Mockery
на любую другую фальшивую структуру):
public function testFooBar()
{
// Mock dependencies
$mockDependency = \Mockery::mock(SomeDependency::class);
$mockDependency
->shouldReceive('someMethod')
->andReturn('Some result');
// Create controller
$fooController = new FooController($mockDependency);
// Act
$response = $fooController->bar(1);
// Assert
$this->assertEquals(200, $response->getStatusCode());
}
Интеграционное тестирование / Функциональное тестирование
ИспользуйтеWebTestCase
как описано здесь :
class FooControllerTest extends WebTestCase
{
public function testFooBar()
{
$client = static::createClient();
$client->request('GET', '/foo/bar/1');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
}
}
Возможно, вы захотите загрузить некоторые Fixtures
перед выполнением этих тестов, так как в большинстве случаев им нужны действительные данные.Взгляните на DoctrineFixturesBundle
здесь .